Nota
El acceso a esta página requiere autorización. Puede intentar iniciar sesión o cambiar directorios.
El acceso a esta página requiere autorización. Puede intentar cambiar los directorios.
Las aplicaciones de .NET Framework, que solo se ejecutan en Windows, pueden usar contadores de rendimiento de Windows para supervisar el estado y el rendimiento de la aplicación. Sin embargo, en .NET Core y versiones posteriores, la plataforma proporciona alternativas multiplataforma a través de las API EventCounters y System.Diagnostics.Metrics .
En este artículo se proporcionan instrucciones sobre cómo migrar de contadores de rendimiento de Windows a los sistemas de métricas más recientes disponibles en las versiones modernas de .NET.
Un breve historial de métricas de .NET
Las aplicaciones .NET se pueden supervisar mediante distintos mecanismos en función de la versión y la plataforma de .NET:
- .NET Framework: usa principalmente contadores de rendimiento de Windows (solo Windows)
- .NET Core 3.0-3.1, .NET 5+: Se han introducido EventCounters (multiplataforma) y métricas integradas en tiempo de ejecución, métricas de red y métricas de ASP.NET mediante estas API
- .NET 6+: se ha agregado System.Diagnostics.Metrics API (multiplataforma, compatible con OpenTelemetry)
- .NET 8+: se han agregado métricas de red integradas y ASP.NET métricas mediante la nueva API System.Diagnostics.Metrics.
- .NET 9+: se han agregado métricas en tiempo de ejecución integradas mediante la nueva API System.Diagnostics.Metrics.
Los sistemas de métricas más recientes ofrecen varias ventajas:
- Operación multiplataforma: funciona en Windows, Linux, macOS
- Compatible con contenedores: funciona en entornos en contenedores
- Herramientas modernas: se integra con openTelemetry y plataformas de observabilidad
- Admite la instalación de xcopy: no se requieren pasos ni privilegios de instalación adicionales.
Para más información, consulte la comparación de la API de métricas.
Recopilación de métricas en aplicaciones modernas de .NET
Para recopilar y analizar métricas, consulte las guías System.Diagnostics.Metrics y EventCounters .
Asignar contadores comunes de rendimiento de Windows a métricas modernas
Si el sistema de supervisión de la aplicación de .NET Framework usa contadores de rendimiento de Windows proporcionados por el entorno de ejecución, deberá seleccionar métricas alternativas basadas en EventCounters o System.Diagnostics.Metrics en su lugar. En las tablas siguientes se muestran alternativas para muchos contadores comunes. No todos los contadores de .NET Framework se han migrado a nuevas alternativas. En algunos casos, los contadores usados con poca frecuencia se descontinuaron y, en otros casos, los cambios de implementación en la plataforma han hecho que ciertos contadores sean irrelevantes.
Contadores de memoria
Contador de rendimiento de Windows | Equivalente a EventCounter | Equivalente a metrics API |
---|---|---|
.NET CLR Memory\# Bytes in all Heaps |
System.Runtime\GC Heap Size (gc-heap-size ) |
System.Runtime\dotnet.gc.last_collection.heap.size |
.NET CLR Memory\# Gen 0 Collections |
System.Runtime\Gen 0 GC Count (gen-0-gc-count ) |
System.Runtime\dotnet.gc.collections con atributo gc.heap.generation=gen0 |
.NET CLR Memory\# Gen 1 Collections |
System.Runtime\Gen 1 GC Count (gen-1-gc-count ) |
System.Runtime\dotnet.gc.collections con atributo gc.heap.generation=gen1 |
.NET CLR Memory\# Gen 2 Collections |
System.Runtime\Gen 2 GC Count (gen-2-gc-count ) |
System.Runtime\dotnet.gc.collections con atributo gc.heap.generation=gen2 |
.NET CLR Memory\% Time in GC |
System.Runtime\% Time in GC since last GC (time-in-gc ) |
System.Runtime\dotnet.gc.pause.time (calcular como porcentaje del tiempo total) |
.NET CLR Memory\# Total committed Bytes |
Ninguno | System.Runtime\dotnet.gc.last_collection.memory.committed_size |
.NET CLR Memory\Large Object Heap Size |
System.Runtime\LOH Size (loh-size ) |
System.Runtime\dotnet.gc.last_collection.heap.size con atributo gc.heap.generation=loh |
.NET CLR Memory\Allocated Bytes/sec |
System.Runtime\Allocation Rate (alloc-rate ) |
Calcular tasa a partir de System.Runtime\dotnet.gc.heap.total_allocated |
Nota:
dotnet.gc.pause.time
permite un cálculo mejorado que evita algún comportamiento no deseado en la métrica anterior % Time in GC
.
% Time in GC
calculado 100 * pause_time_in_most_recent_GC
/ time_between_most_recent_two_GCs
. En algunos casos, dos GCs se producirían muy cerca produciendo un valor alto basado en una pequeña parte no representativa del intervalo de tiempo general.
gc.heap.pause.time
acumula el tiempo total que el GC ha pausado los subprocesos de aplicación hasta ahora en un proceso, lo que permite calcular el tiempo de pausa de GC durante cualquier intervalo de tiempo medido. Se trata de una medida verdadera de la sobrecarga de GC, pero el cambio en el cálculo significa que las métricas podrían no coincidir incluso cuando el comportamiento de GC subyacente no se modifica.
Contadores JIT y Carga
Contador de rendimiento de Windows | Equivalente a EventCounter | Equivalente a metrics API |
---|---|---|
.NET CLR Jit\# of Methods Jitted |
System.Runtime\Methods Jitted Count (methods-jitted-count ) |
System.Runtime\dotnet.jit.compiled_methods |
.NET CLR Jit\IL Bytes Jitted |
System.Runtime\IL Bytes Jitted (il-bytes-jitted ) |
System.Runtime\dotnet.jit.compiled_il.size |
.NET CLR Loading\Current Assemblies |
System.Runtime\Number of Assemblies Loaded (assembly-count ) |
System.Runtime\dotnet.assembly.count |
.NET CLR Jit\Total # of IL Bytes Jitted |
System.Runtime\IL Bytes Jitted (il-bytes-jitted ) |
System.Runtime\dotnet.jit.compiled_il.size |
Contadores de subprocesos
Contador de rendimiento de Windows | Equivalente a EventCounter | Equivalente a metrics API |
---|---|---|
.NET CLR LocksAndThreads\Current Queue Length |
System.Runtime\ThreadPool Queue Length (threadpool-queue-length ) |
System.Runtime\dotnet.thread_pool.queue.length |
.NET CLR LocksAndThreads\Contention Rate / sec |
System.Runtime\Monitor Lock Contention Count (monitor-lock-contention-count ) |
Calcular tasa a partir de System.Runtime\dotnet.monitor.lock_contentions |
Contadores de excepciones
Contador de rendimiento de Windows | Equivalente a EventCounter | Equivalente a metrics API |
---|---|---|
.NET CLR Exceptions\# of Exceps Thrown / sec |
System.Runtime\Exception Count (exception-count ) |
Calcular tasa a partir de System.Runtime\dotnet.exceptions |
.NET CLR Exceptions\# of Exceps Thrown |
Ninguno | System.Runtime\dotnet.exceptions |
Contadores de red de sockets
Contador de rendimiento de Windows | Equivalente a EventCounter | Equivalente a metrics API |
---|---|---|
.NET CLR Networking\Bytes Received |
System.Net.Sockets\Bytes Received (bytes-received ) |
Ninguno |
.NET CLR Networking\Bytes Sent |
System.Net.Sockets\Bytes Sent (bytes-sent ) |
Ninguno |
.NET CLR Networking\Connections Established |
System.Net.Sockets\Outgoing Connections Established (outgoing-connections-established ) |
Ninguno |
.NET CLR Networking\Datagrams Received |
System.Net.Sockets\Datagrams Received (datagrams-received ) |
Ninguno |
.NET CLR Networking\Datagrams Sent |
System.Net.Sockets\Datagrams Sent (datagrams-sent ) |
Ninguno |
Contadores de red DNS
Contador de rendimiento de Windows | Equivalente a EventCounter | Equivalente a metrics API |
---|---|---|
.NET CLR Networking\DNS Lookups |
System.Net.NameResolution\DNS Lookups Requested (dns-lookups-requested ) |
Suma de los cubos de histograma en System.Net.NameResolution\dns.lookup.duration |
.NET CLR Networking\DNS Resolution Time |
System.Net.NameResolution\Average DNS Lookup Duration (dns-lookups-duration ) |
System.Net.NameResolution\dns.lookup.duration |
Contadores HttpWebRequest
HttpWebRequest
ha sido reemplazado por HttpClient. Para obtener información sobre las métricas integradas, consulte HttpClient EventCounters y System.Diagnostics.Metrics.
contadores de ASP.NET
ASP.NET ha cambiado drásticamente entre .NET Framework y .NET Core. Muchos contadores están obsoletos o se miden de forma diferente a en el pasado. Para obtener información sobre qué métricas están integradas, consulte el ASP.NET EventCounters y System.Diagnostics.Metrics.
Pasos siguientes
- Más información sobre EventCounters en .NET
- Exploración de la API System.Diagnostics.Metrics
- Información sobre cómo recopilar métricas
- Revisión de eventCounters conocidos y métricas integradas