Métricas de .NET Runtime
En este artículo se describen las métricas integradas para las bibliotecas en tiempo de ejecución de .NET que se generan mediante la System.Diagnostics.Metrics API. Para obtener una lista de métricas basadas en la API EventCounters anterior, consulte Contadores disponibles.
Sugerencia
Para obtener más información sobre cómo recopilar e informar de estas métricas, consulte Recopilación de métricas.
System.Runtime
El System.Runtime
medidor informa de medidas de gc, JIT, AssemblyLoader, Threadpool y partes de control de excepciones del entorno de ejecución de .NET, así como algunas métricas de CPU y memoria del sistema operativo. Estas métricas están disponibles automáticamente para todas las aplicaciones .NET.
Métrica: dotnet.process.cpu.time
Nombre | Tipo de instrumento | Unidad (UCUM) | Descripción |
---|---|---|---|
dotnet.process.cpu.time |
Contador | s |
Tiempo de CPU usado por el proceso. |
Attribute | Tipo | Descripción | Ejemplos | Presencia |
---|---|---|---|---|
cpu.mode |
string | Modo de cpu. | user ; system |
Siempre |
Esta métrica informa de los mismos valores que el acceso a las propiedades de tiempo del procesador en System.Diagnostics.Process para el proceso actual. El system
modo corresponde a PrivilegedProcessorTime y user
al modo corresponde a UserProcessorTime
Disponible a partir de: .NET 9.0.
Métrica: dotnet.process.memory.working_set
Nombre | Tipo de instrumento | Unidad (UCUM) | Descripción |
---|---|---|---|
dotnet.process.memory.working_set |
UpDownCounter | By |
Número de bytes de memoria física asignada al contexto del proceso. |
Esta métrica informa de los mismos valores que la propiedad de llamada Environment.WorkingSet .
Disponible a partir de: .NET 9.0.
Métrica: dotnet.gc.collections
Nombre | Tipo de instrumento | Unidad (UCUM) | Descripción |
---|---|---|---|
dotnet.gc.collections |
Contador | {collection} |
Número de recolecciones de elementos no utilizados que se han producido desde que se inició el proceso. |
Attribute | Tipo | Descripción | Ejemplos | Presencia |
---|---|---|---|---|
dotnet.gc.heap.generation |
string | Nombre de la generación máxima del montón administrado que se va a recopilar. | gen0 ; gen1 ; gen2 |
Siempre |
El GC de .NET es un recolector de elementos no utilizados de generación. Cada vez que se ejecuta el recolector de elementos no utilizados, usa heurística para seleccionar una generación máxima y, a continuación, recopila objetos de todas las generaciones hasta el máximo seleccionado. Por ejemplo, una gen1
colección recopila todos los objetos de las generaciones 0 y 1. Una gen2
colección recopila todos los objetos de las generaciones 0, 1 y 2. Para obtener más información sobre la recolección de elementos no utilizados de recolección de elementos no utilizados de .NET y de generación, consulte la guía de recolección de elementos no utilizados de .NET.
Disponible a partir de: .NET 9.0.
Métrica: dotnet.gc.heap.total_allocated
Nombre | Tipo de instrumento | Unidad (UCUM) | Descripción |
---|---|---|---|
dotnet.gc.heap.total_allocated |
Contador | By |
Número aproximado de bytes asignados en el montón de GC administrado desde que se inició el proceso. El valor devuelto no incluye ninguna asignación nativa. |
Esta métrica informa de los mismos valores que llamar a GC.GetTotalAllocatedBytes. Para obtener más información sobre la gc de .NET, consulte la guía de recolección de elementos no utilizados de .NET.
Disponible a partir de: .NET 9.0.
Métrica: dotnet.gc.last_collection.memory.committed_size
Nombre | Tipo de instrumento | Unidad (UCUM) | Descripción |
---|---|---|---|
dotnet.gc.last_collection.memory.committed_size |
UpDownCounter | By |
Cantidad de memoria virtual confirmada que usa el GC de .NET, como se observa durante la recolección de elementos no utilizados más reciente. |
Esta métrica informa de los mismos valores que llamar a GCMemoryInfo.TotalCommittedBytes. La memoria virtual confirmada puede ser mayor que el tamaño del montón porque incluye memoria para almacenar objetos existentes (el tamaño del montón) y alguna memoria adicional que esté lista para controlar objetos recién asignados en el futuro. Para obtener más información sobre la gc de .NET, consulte la guía de recolección de elementos no utilizados de .NET.
Disponible a partir de: .NET 9.0.
Métrica: dotnet.gc.last_collection.heap.size
Nombre | Tipo de instrumento | Unidad (UCUM) | Descripción |
---|---|---|---|
dotnet.gc.last_collection.heap.size |
UpDownCounter | By |
Tamaño del montón de GC administrado (incluida la fragmentación), como se observa durante la recolección de elementos no utilizados más reciente. |
Attribute | Tipo | Descripción | Ejemplos | Presencia |
---|---|---|---|---|
dotnet.gc.heap.generation |
string | Nombre de la generación de montón administrado por el recolector de elementos no utilizados. | gen0 ; gen1 ; ;loh gen2 ;poh |
Siempre |
El GC de .NET divide el montón en generaciones. Además de las generaciones numeradas estándar, el GC también coloca algunos objetos en dos generaciones especiales:
- El montón de objetos grandes (LOH) almacena objetos .NET muy grandes en comparación con los objetos típicos.
- El montón de objetos anclados (POH) almacena los objetos asignados mediante la GC.AllocateArray API cuando el
pinned
parámetro es true.
Ambas generaciones especiales se recopilan durante gen2
las recopilaciones de GC. Para obtener más información sobre la gc de .NET, consulte la guía de recolección de elementos no utilizados de .NET.
Disponible a partir de: .NET 9.0.
Métrica: dotnet.gc.last_collection.heap.fragmentation.size
Nombre | Tipo de instrumento | Unidad (UCUM) | Descripción |
---|---|---|---|
dotnet.gc.last_collection.heap.fragmentation.size |
UpDownCounter | By |
Fragmentación del montón, como se observa durante la recolección de elementos no utilizados más reciente. |
Esta métrica informa de los mismos valores que llamar a GCGenerationInfo.FragmentationAfterBytes.
Cuando se asignan objetos .NET, inicialmente tienden a estar dispuestos de forma contigua en la memoria. Sin embargo, si el GC recopila más adelante algunos de esos objetos, esto crea espacios de memoria no utilizados entre los objetos activos que permanecen. Estos huecos representan la parte del montón de GC que no se usa actualmente para almacenar objetos, a menudo denominados "fragmentación". El GC puede reutilizar los bytes de fragmentación en el futuro para las nuevas asignaciones de objetos si el tamaño del objeto es lo suficientemente pequeño como para caber en una de las lagunas. El GC también puede realizar una recolección de elementos no utilizados de compactación especial que mueve los objetos activos restantes entre sí siempre que los objetos no se hayan anclado en su lugar.
Para obtener más información sobre cómo funciona el GC de .NET, analizar el rendimiento de GC y qué rol desempeña la fragmentación, consulte Análisis de rendimiento de memoria de .NET.
Disponible a partir de: .NET 9.0.
Métrica: dotnet.gc.pause.time
Nombre | Tipo de instrumento | Unidad (UCUM) | Descripción |
---|---|---|---|
dotnet.gc.pause.time |
Contador | s |
Cantidad total de tiempo en pausa en GC desde que se inició el proceso. |
Esta métrica informa de los mismos valores que llamar a GC.GetTotalPauseDuration().
Cada vez que el GC de .NET realiza una colección, debe pausar brevemente todos los subprocesos que ejecutan código administrado para determinar a qué objetos todavía se hace referencia. Esta métrica informa de la suma de todos estos tiempos de pausa desde que se inició el proceso. Puede usar esta métrica para determinar qué fracción de tiempo pasan los subprocesos en pausa para gc frente al tiempo que pueden ejecutar código administrado.
Disponible a partir de: .NET 9.0.
Métrica: dotnet.jit.compiled_il.size
Nombre | Tipo de instrumento | Unidad (UCUM) | Descripción |
---|---|---|---|
dotnet.jit.compiled_il.size |
Contador | By |
Recuento de bytes del lenguaje intermedio que se han compilado desde que se inició el proceso. |
Esta métrica informa de los mismos valores que llamar a JitInfo.GetCompiledILBytes.
Al compilar una aplicación .NET, el código administrado se compila inicialmente desde un lenguaje de alto nivel, como C#, VB o F# en lenguaje intermedio (IL). A continuación, cuando se ejecuta el programa, el compilador Just-In-Time (JIT) de .NET convierte el IL en código de máquina.
Dado que la compilación JIT se produce la primera vez que se ejecuta un método, la mayoría de la compilación JIT tiende a producirse durante el inicio de la aplicación. Reducir la cantidad de IL compilada jiT puede mejorar el tiempo de inicio de la aplicación.
Disponible a partir de: .NET 9.0.
Métrica: dotnet.jit.compiled_methods
Nombre | Tipo de instrumento | Unidad (UCUM) | Descripción |
---|---|---|---|
dotnet.jit.compiled_methods |
Contador | {method} |
Número de veces que el compilador JIT (re)compilado métodos desde que se inició el proceso. |
Esta métrica informa de los mismos valores que llamar a JitInfo.GetCompiledMethodCount.
Al compilar una aplicación .NET, el código administrado se compila inicialmente desde un lenguaje de alto nivel, como C#, VB o F# en lenguaje intermedio (IL). A continuación, cuando se ejecuta el programa, el compilador Just-In-Time (JIT) de .NET convierte el IL en código de máquina.
Dado que la compilación JIT se produce la primera vez que se ejecuta un método, la mayoría de la compilación JIT tiende a producirse durante el inicio de la aplicación. Reducir el número de métodos que deben compilarse JIT puede mejorar el tiempo de inicio de la aplicación.
Disponible a partir de: .NET 9.0.
Métrica: dotnet.jit.compilation.time
Nombre | Tipo de instrumento | Unidad (UCUM) | Descripción |
---|---|---|---|
dotnet.jit.compilation.time |
Contador | s |
La cantidad de tiempo que el compilador JIT ha dedicado a compilar métodos desde que se inició el proceso. |
Esta métrica informa de los mismos valores que llamar a JitInfo.GetCompilationTime.
Al compilar una aplicación .NET, el código administrado se compila inicialmente desde un lenguaje de alto nivel, como C#, VB o F# en lenguaje intermedio (IL). A continuación, cuando se ejecuta el programa, el compilador Just-In-Time (JIT) de .NET convierte el IL en código de máquina.
Dado que la compilación JIT se produce la primera vez que se ejecuta un método, la mayoría de la compilación JIT tiende a producirse durante el inicio de la aplicación. Reducir el tiempo invertido en compilar JIT puede mejorar el tiempo de inicio de la aplicación.
Disponible a partir de: .NET 9.0.
Métrica: dotnet.thread_pool.thread.count
Nombre | Tipo de instrumento | Unidad (UCUM) | Descripción |
---|---|---|---|
dotnet.thread_pool.thread.count |
UpDownCounter | {thread} |
Número de subprocesos de grupo de subprocesos que existen actualmente. |
Esta métrica informa de los mismos valores que llamar a ThreadPool.ThreadCount.
.NET usa un grupo de subprocesos para programar elementos de trabajo en otros subprocesos. Esta métrica proporciona el número de subprocesos de trabajo administrados actualmente por ese grupo de subprocesos.
Disponible a partir de: .NET 9.0.
Métrica: dotnet.thread_pool.work_item.count
Nombre | Tipo de instrumento | Unidad (UCUM) | Descripción |
---|---|---|---|
dotnet.thread_pool.work_item.count |
Contador | {work_item} |
Número de elementos de trabajo que el grupo de subprocesos ha completado desde que se inició el proceso. |
Esta métrica informa de los mismos valores que llamar a ThreadPool.CompletedWorkItemCount.
.NET usa un grupo de subprocesos para programar elementos de trabajo en otros subprocesos. Esta métrica proporciona el número de elementos de trabajo ejecutados por los subprocesos del grupo de subprocesos.
Disponible a partir de: .NET 9.0.
Métrica: dotnet.thread_pool.queue.length
Nombre | Tipo de instrumento | Unidad (UCUM) | Descripción |
---|---|---|---|
dotnet.thread_pool.queue.length |
UpDownCounter | {work_item} |
Número de elementos de trabajo actualmente en cola que va a procesar el grupo de subprocesos. |
Esta métrica informa de los mismos valores que llamar a ThreadPool.PendingWorkItemCount.
.NET usa un grupo de subprocesos para programar elementos de trabajo en otros subprocesos. Esta métrica proporciona el número de elementos de trabajo que están actualmente en cola para ejecutar uno de los subprocesos del grupo de subprocesos.
Disponible a partir de: .NET 9.0.
Métrica: dotnet.monitor.lock_contentions
Nombre | Tipo de instrumento | Unidad (UCUM) | Descripción |
---|---|---|---|
dotnet.monitor.lock_contentions |
Contador | {contention} |
Número de veces que hubo contención al intentar adquirir un bloqueo de monitor desde que se inició el proceso. |
Esta métrica informa de los mismos valores que llamar a Monitor.LockContentionCount.
.NET admite el uso de cualquier objeto administrado como bloqueo, ya sea con API como Monitor.Enter o con la instrucción lock. Si un subproceso ya contiene un bloqueo mientras un segundo subproceso intenta adquirirlo, se denomina contención de bloqueo.
Disponible a partir de: .NET 9.0.
Métrica: dotnet.timer.count
Nombre | Tipo de instrumento | Unidad (UCUM) | Descripción |
---|---|---|---|
dotnet.timer.count |
UpDownCounter | {timer} |
Número de instancias del temporizador que están activas actualmente. |
Esta métrica informa de los mismos valores que llamar a Timer.ActiveCount.
Disponible a partir de: .NET 9.0.
Métrica: dotnet.assembly.count
Nombre | Tipo de instrumento | Unidad (UCUM) | Descripción |
---|---|---|---|
dotnet.assembly.count |
UpDownCounter | {assembly} |
Número de ensamblados de .NET que están cargados actualmente. |
Esta métrica informa de los mismos valores que llamar AppDomain.GetAssemblies() a y, a continuación, comprobar la longitud de la matriz devuelta.
Disponible a partir de: .NET 9.0.
Métrica: dotnet.exceptions
Nombre | Tipo de instrumento | Unidad (UCUM) | Descripción |
---|---|---|---|
dotnet.exceptions |
Contador | {exception} |
Número de excepciones que se han producido en código administrado. |
Attribute | Tipo | Descripción | Ejemplos | Presencia |
---|---|---|---|---|
error.type |
string | Tipo de excepción que se produjo. | System.OperationCanceledException ; Contoso.MyException |
Required |
Esta métrica informa de los mismos valores que el recuento de llamadas al AppDomain.FirstChanceException evento.
Disponible a partir de: .NET 9.0.