Примечание.
Для доступа к этой странице требуется авторизация. Вы можете попробовать войти или изменить каталоги.
Для доступа к этой странице требуется авторизация. Вы можете попробовать изменить каталоги.
В этой статье описываются встроенные метрики для библиотек среды выполнения .NET, созданных с помощью System.Diagnostics.Metrics API. Список метрик на основе старого API EventCounters см. в разделе "Доступные счетчики".
Совет
Дополнительные сведения о том, как собирать и сообщать об этих метриках, см. в разделе "Сбор метрик".
System.Runtime
Счетчик System.Runtime сообщает измерения из GC, JIT, AssemblyLoader, Threadpool и частей обработки исключений среды выполнения .NET, а также некоторые метрики ЦП и памяти операционной системы. Эти метрики доступны автоматически для всех приложений .NET.
Метрика: dotnet.process.cpu.time
| Имя. | Тип инструмента | Единица (UCUM) | Description |
|---|---|---|---|
dotnet.process.cpu.time |
Counter<T> | s |
Время ЦП, используемое процессом. |
| Атрибут | Тип | Description | Примеры | Присутствие |
|---|---|---|---|---|
cpu.mode |
string |
Режим ЦП. |
user; system |
Всегда |
Эта метрика сообщает те же значения, что и доступ к свойствам System.Diagnostics.Process времени процессора для текущего процесса. Режим system соответствует PrivilegedProcessorTime и user соответствует режиму UserProcessorTime
Доступно начиная с .NET 9.
Метрика: dotnet.process.memory.working_set
| Имя. | Тип инструмента | Единица (UCUM) | Description |
|---|---|---|---|
dotnet.process.memory.working_set |
UpDownCounter<T> | By |
Количество байтов физической памяти, сопоставленных с контекстом процесса. |
Эта метрика сообщает те же значения, что и вызывающее Environment.WorkingSet свойство.
Доступно начиная с .NET 9.
Метрика: dotnet.gc.collections
| Имя. | Тип инструмента | Единица (UCUM) | Description |
|---|---|---|---|
dotnet.gc.collections |
Counter<T> | {collection} |
Число сборок мусора, которые произошли с момента начала процесса. |
| Атрибут | Тип | Description | Примеры | Присутствие |
|---|---|---|---|---|
gc.heap.generation |
string |
Имя собираемого максимального поколения управляемой кучи. |
gen0; gen1; gen2 |
Всегда |
.NET GC — это сборщик мусора поколения. При каждом запуске сборщика мусора он использует эвристики для выбора максимального поколения, а затем собирает объекты во всех поколениях до выбранного максимума. Например, gen1 коллекция собирает все объекты в поколениях 0 и 1. Коллекция gen2 собирает все объекты в поколениях 0, 1 и 2. Дополнительные сведения о сборке мусора .NET и сборке мусора поколения см. в руководстве по сбору мусора .NET.
Доступно начиная с .NET 9.
Метрика: dotnet.gc.heap.total_allocated
| Имя. | Тип инструмента | Единица (UCUM) | Description |
|---|---|---|---|
dotnet.gc.heap.total_allocated |
Counter<T> | By |
Приблизительное количество байтов, выделенных в куче управляемой сборки GC с момента начала процесса. Возвращаемое значение не включает собственные выделения. |
Эта метрика сообщает те же значения, что и вызов GC.GetTotalAllocatedBytes. Дополнительные сведения о сборке мусора .NET см. в руководстве по сбору мусора .NET.
Доступно начиная с .NET 9.
Метрика: dotnet.gc.last_collection.memory.committed_size
| Имя. | Тип инструмента | Единица (UCUM) | Description |
|---|---|---|---|
dotnet.gc.last_collection.memory.committed_size |
UpDownCounter<T> | By |
Объем зафиксированной виртуальной памяти, используемой .NET GC, как показано во время последней сборки мусора. |
Эта метрика сообщает те же значения, что и вызов GCMemoryInfo.TotalCommittedBytes. Зафиксированная виртуальная память может быть больше размера кучи, так как она включает в себя память для хранения существующих объектов (размер кучи) и некоторой дополнительной памяти, готовой к обработке только что выделенных объектов в будущем. Дополнительные сведения о сборке мусора .NET см. в руководстве по сбору мусора .NET.
Доступно начиная с .NET 9.
Метрика: dotnet.gc.last_collection.heap.size
| Имя. | Тип инструмента | Единица (UCUM) | Description |
|---|---|---|---|
dotnet.gc.last_collection.heap.size |
UpDownCounter<T> | By |
Размер кучи управляемой сборки GC (включая фрагментацию), как отмечалось во время последней сборки мусора. |
| Атрибут | Тип | Description | Примеры | Присутствие |
|---|---|---|---|---|
gc.heap.generation |
string |
Имя поколения управляемой кучи сборщика мусора. |
gen0; gen1; ; gen2loh; poh |
Всегда |
GC .NET делит кучу на поколения. Помимо стандартных нумерованных поколений, GC также помещает некоторые объекты в два специальных поколения:
- Большие кучи объектов (LOH) хранят объекты .NET, которые очень большие по сравнению с типичными объектами.
- Закрепленная куча объектов (POH) сохраняет объекты, выделенные с помощью GC.AllocateArray API, если
pinnedпараметр имеет значение true.
Оба этих специальных поколения собираются во время gen2 коллекций GC. Дополнительные сведения о сборке мусора .NET см. в руководстве по сбору мусора .NET.
Доступно начиная с .NET 9.
Метрика: dotnet.gc.last_collection.heap.fragmentation.size
| Имя. | Тип инструмента | Единица (UCUM) | Description |
|---|---|---|---|
dotnet.gc.last_collection.heap.fragmentation.size |
UpDownCounter<T> | By |
Фрагментация кучи, как отмечалось во время последней сборки мусора. |
| Атрибут | Тип | Description | Примеры | Присутствие |
|---|---|---|---|---|
gc.heap.generation |
string |
Имя поколения управляемой кучи сборщика мусора. |
gen0; gen1; ; gen2loh; poh |
Всегда |
Эта метрика сообщает те же значения, что и вызов GCGenerationInfo.FragmentationAfterBytes.
При выделении объектов .NET изначально они обычно размещаются в памяти. Однако если некоторые из этих объектов позже собираются в GC, это создает пробелы неиспользуемой памяти между оставшимися динамическими объектами. Эти пробелы представляют часть кучи GC, которая в настоящее время не используется для хранения объектов, часто называемых "фрагментацией". GC может повторно использовать байты фрагментации в будущем для новых выделений объектов, если размер объекта достаточно мал, чтобы поместиться в один из пробелов. GC также может выполнять специальную сборку мусора, которая перемещает оставшиеся живые объекты рядом друг с другом, пока объекты не были закреплены на месте.
Дополнительные сведения о работе .NET GC, анализе производительности GC и о том, какие роли играют фрагментации ролей, см. в статье об анализе производительности памяти .NET.
Доступно начиная с .NET 9.
Метрика: dotnet.gc.pause.time
| Имя. | Тип инструмента | Единица (UCUM) | Description |
|---|---|---|---|
dotnet.gc.pause.time |
Counter<T> | s |
Общее время приостановки в GC с момента начала процесса. |
Эта метрика сообщает те же значения, что и вызов GC.GetTotalPauseDuration().
Каждый раз, когда GC .NET выполняет коллекцию, необходимо кратко приостановить все потоки, на которые выполняется управляемый код, чтобы определить, на какие объекты по-прежнему ссылаются. Эта метрика сообщает сумму всех этих времен приостановки с начала процесса. Эту метрику можно использовать, чтобы определить, какая доля потоков времени тратится приостановлено для GC и времени, когда они могут запускать управляемый код.
Доступно начиная с .NET 9.
Метрика: dotnet.jit.compiled_il.size
| Имя. | Тип инструмента | Единица (UCUM) | Description |
|---|---|---|---|
dotnet.jit.compiled_il.size |
Counter<T> | By |
Количество байтов промежуточного языка, скомпилированных с момента начала процесса. |
Эта метрика сообщает те же значения, что и вызов JitInfo.GetCompiledILBytes.
При создании приложения .NET управляемый код изначально компилируется с высокоуровневого языка, например C#, VB или F# на промежуточный язык (IL). Затем при запуске программы компилятор .NET jIT преобразует IL в машинный код.
Так как компиляция JIT возникает при первом запуске метода, большинство JIT-компиляций, как правило, возникает во время запуска приложения. Уменьшение количества скомпилированных JIT-кодов может повысить время запуска приложения.
Доступно начиная с .NET 9.
Метрика: dotnet.jit.compiled_methods
| Имя. | Тип инструмента | Единица (UCUM) | Description |
|---|---|---|---|
dotnet.jit.compiled_methods |
Counter<T> | {method} |
Количество скомпилированных методов JIT-компилятора (re)с момента запуска процесса. |
Эта метрика сообщает те же значения, что и вызов JitInfo.GetCompiledMethodCount.
При создании приложения .NET управляемый код изначально компилируется с высокоуровневого языка, например C#, VB или F# на промежуточный язык (IL). Затем при запуске программы компилятор .NET jIT преобразует IL в машинный код.
Так как компиляция JIT возникает при первом запуске метода, большинство JIT-компиляций, как правило, возникает во время запуска приложения. Сокращение количества методов, которые необходимо скомпилировать JIT, может улучшить время запуска приложения.
Доступно начиная с .NET 9.
Метрика: dotnet.jit.compilation.time
| Имя. | Тип инструмента | Единица (UCUM) | Description |
|---|---|---|---|
dotnet.jit.compilation.time |
Counter<T> | s |
Время, затраченное компилятором JIT, с момента начала процесса. |
Эта метрика сообщает те же значения, что и вызов JitInfo.GetCompilationTime.
При создании приложения .NET управляемый код изначально компилируется с высокоуровневого языка, например C#, VB или F# на промежуточный язык (IL). Затем при запуске программы компилятор .NET jIT преобразует IL в машинный код.
Так как компиляция JIT возникает при первом запуске метода, большинство JIT-компиляций, как правило, возникает во время запуска приложения. Сокращение времени, затраченного на компиляцию JIT, может повысить время запуска приложения.
Доступно начиная с .NET 9.
Метрика: dotnet.thread_pool.thread.count
| Имя. | Тип инструмента | Единица (UCUM) | Description |
|---|---|---|---|
dotnet.thread_pool.thread.count |
UpDownCounter<T> | {thread} |
Количество потоков пула потоков, которые в настоящее время существуют. |
Эта метрика сообщает те же значения, что и вызов ThreadPool.ThreadCount.
.NET использует пул потоков для планирования рабочих элементов на другие потоки. Эта метрика предоставляет количество рабочих потоков, управляемых в настоящее время этим пулом потоков.
Доступно начиная с .NET 9.
Метрика: dotnet.thread_pool.work_item.count
| Имя. | Тип инструмента | Единица (UCUM) | Description |
|---|---|---|---|
dotnet.thread_pool.work_item.count |
Counter<T> | {work_item} |
Количество рабочих элементов, завершенных пулом потоков с момента начала процесса. |
Эта метрика сообщает те же значения, что и вызов ThreadPool.CompletedWorkItemCount.
.NET использует пул потоков для планирования рабочих элементов на другие потоки. Эта метрика предоставляет количество рабочих элементов, выполняемых потоками пула потоков.
Доступно начиная с .NET 9.
Метрика: dotnet.thread_pool.queue.length
| Имя. | Тип инструмента | Единица (UCUM) | Description |
|---|---|---|---|
dotnet.thread_pool.queue.length |
UpDownCounter<T> | {work_item} |
Количество рабочих элементов, которые в настоящее время помещаются в очередь пулом потоков. |
Эта метрика сообщает те же значения, что и вызов ThreadPool.PendingWorkItemCount.
.NET использует пул потоков для планирования рабочих элементов на другие потоки. Эта метрика предоставляет количество рабочих элементов, которые в настоящее время помещаются в очередь одним из потоков пула потоков.
Доступно начиная с .NET 9.
Метрика: dotnet.monitor.lock_contentions
| Имя. | Тип инструмента | Единица (UCUM) | Description |
|---|---|---|---|
dotnet.monitor.lock_contentions |
Counter<T> | {contention} |
Количество конфликтов при попытке получить блокировку монитора с момента начала процесса. |
Эта метрика сообщает те же значения, что и вызов Monitor.LockContentionCount.
.NET поддерживает использование любого управляемого объекта в качестве блокировки либо с API- интерфейсами, такими как Monitor.Enter или с инструкцией блокировки. Если один поток уже содержит блокировку, а второй поток пытается получить его, это называется конфликтом блокировки.
Доступно начиная с .NET 9.
Метрика: dotnet.timer.count
| Имя. | Тип инструмента | Единица (UCUM) | Description |
|---|---|---|---|
dotnet.timer.count |
UpDownCounter<T> | {timer} |
Количество экземпляров таймера, которые сейчас активны. |
Эта метрика сообщает те же значения, что и вызов Timer.ActiveCount.
Доступно начиная с .NET 9.
Метрика: dotnet.assembly.count
| Имя. | Тип инструмента | Единица (UCUM) | Description |
|---|---|---|---|
dotnet.assembly.count |
UpDownCounter<T> | {assembly} |
Количество сборок .NET, загруженных в данный момент. |
Эта метрика сообщает те же значения, что и вызов AppDomain.GetAssemblies() , а затем проверяет длину возвращаемого массива.
Доступно начиная с .NET 9.
Метрика: dotnet.exceptions
| Имя. | Тип инструмента | Единица (UCUM) | Description |
|---|---|---|---|
dotnet.exceptions |
Counter<T> | {exception} |
Число исключений, которые были созданы в управляемом коде. |
| Атрибут | Тип | Description | Примеры | Присутствие |
|---|---|---|---|---|
error.type |
string |
Тип исключения, который был создан. |
System.OperationCanceledException; Contoso.MyException |
Required |
Эта метрика сообщает те же значения, что и подсчет вызовов AppDomain.FirstChanceException события.
Доступно начиная с .NET 9.