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