Compartir a través de


Migración de contadores de rendimiento de Windows de .NET Framework a métricas de .NET

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