Delen via


Migreren van .NET Framework Windows-prestatiemeteritems naar metrische .NET-gegevens

.NET Framework-toepassingen, die alleen worden uitgevoerd in Windows, kunnen Windows-prestatiemeteritems gebruiken om de status en prestaties van toepassingen te bewaken. In .NET Core en latere versies biedt het platform echter platformoverschrijdende alternatieven via de EventCounters - en System.Diagnostics.Metrics-API's .

Dit artikel bevat richtlijnen voor het migreren van Windows-prestatiemeteritems naar de nieuwere metrische systemen die beschikbaar zijn in moderne .NET-versies.

Een korte geschiedenis van metrische .NET-gegevens

.NET-toepassingen kunnen worden bewaakt met behulp van verschillende mechanismen, afhankelijk van de .NET-versie en het platform:

  • .NET Framework: maakt voornamelijk gebruik van Windows-prestatiemeteritems (alleen Windows)
  • .NET Core 3.0-3.1, .NET 5+: EventCounters (platformoverschrijdend) en ingebouwde runtimegegevens, netwerkmetrieken en ASP.NET metrische gegevens geïntroduceerd met behulp van deze API's
  • .NET 6+: System.Diagnostics.Metrics-API toegevoegd (platformoverschrijdend, OpenTelemetry compatibel)
  • .NET 8+: ingebouwde netwerkgegevens en ASP.NET metrische gegevens toegevoegd met behulp van de nieuwe System.Diagnostics.Metrics-API
  • .NET 9+: ingebouwde runtimegegevens toegevoegd met behulp van de nieuwe System.Diagnostics.Metrics-API

De nieuwere systemen voor metrische gegevens bieden verschillende voordelen:

  • Platformoverschrijdende bewerking: Werkt op Windows, Linux, macOS
  • Containervriendelijk: Werkt in containeromgevingen
  • Moderne hulpprogramma's: integreert met OpenTelemetry- en waarneembaarheidsplatforms
  • Ondersteunt xcopy-installatie: er zijn geen extra installatiestappen of bevoegdheden vereist

Zie de vergelijking van de Metrics-API voor meer informatie.

Metrische gegevens verzamelen in moderne .NET-toepassingen

Als u metrische gegevens wilt verzamelen en analyseren, raadpleegt u de handleidingen System.Diagnostics.Metrics en EventCounters .

Veelvoorkomende Windows-prestatiecounters koppelen aan moderne metrische gegevens

Als het monitoringssysteem voor uw .NET Framework-toepassing gebruikmaakt van door de runtime geleverde Windows Performance Counters, moet u in plaats daarvan alternatieve EventCounters of op System.Diagnostics.Metrics gebaseerde metrische gegevens selecteren. In de volgende tabellen ziet u alternatieven voor veel algemene tellers. Niet alle .NET Framework-tellers zijn overgezet naar nieuwe alternatieven. In sommige gevallen werden onregelmatig gebruikte tellers stopgezet, en in andere gevallen hebben implementatiewijzigingen in het platform bepaalde tellers irrelevant gemaakt.

Geheugentellers

Prestatiecounter van Windows EventCounter-equivalent Equivalent van api voor metrische gegevens
.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 met kenmerk 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 met kenmerk 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 met kenmerk 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 (berekenen als percentage van de totale tijd)
.NET CLR Memory\# Total committed Bytes Geen 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 met kenmerk gc.heap.generation=loh
.NET CLR Memory\Allocated Bytes/sec System.Runtime\Allocation Rate (alloc-rate) Rente berekenen op System.Runtime\dotnet.gc.heap.total_allocated

Opmerking

dotnet.gc.pause.time maakt een verbeterde berekening mogelijk die ongewenst gedrag in de oudere % Time in GC metrische gegevens vermijdt. % Time in GC berekend 100 * pause_time_in_most_recent_GC / time_between_most_recent_two_GCs. In sommige gevallen zouden twee GC's zeer dicht bij elkaar voorkomen, waardoor een hoge waarde ontstaat op basis van een klein niet-representatief gedeelte van het totale tijdsinterval. gc.heap.pause.time verzamelt de totale tijd die de GC tot nu toe heeft gebruikt om applicatiedraden te pauzeren, wat het mogelijk maakt om de GC-pauzetijd tijdens een gemeten tijdsinterval te berekenen. Dit is een echte meting van GC-overhead, maar de wijziging in de berekening betekent dat de metrische gegevens mogelijk niet overeenkomen, zelfs niet wanneer het onderliggende GC-gedrag ongewijzigd is.

JIT- en laadtellers

Prestatiecounter van Windows EventCounter-equivalent Equivalent van api voor metrische gegevens
.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

Draad-tellers

Prestatiecounter van Windows EventCounter-equivalent Equivalent van api voor metrische gegevens
.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) Rente berekenen op System.Runtime\dotnet.monitor.lock_contentions

Uitzonderingen-tellers

Prestatiecounter van Windows EventCounter-equivalent Equivalent van api voor metrische gegevens
.NET CLR Exceptions\# of Exceps Thrown / sec System.Runtime\Exception Count (exception-count) Rente berekenen op System.Runtime\dotnet.exceptions
.NET CLR Exceptions\# of Exceps Thrown Geen System.Runtime\dotnet.exceptions

Socketnetwerktellers

Prestatiecounter van Windows EventCounter-equivalent Equivalent van api voor metrische gegevens
.NET CLR Networking\Bytes Received System.Net.Sockets\Bytes Received (bytes-received) Geen
.NET CLR Networking\Bytes Sent System.Net.Sockets\Bytes Sent (bytes-sent) Geen
.NET CLR Networking\Connections Established System.Net.Sockets\Outgoing Connections Established (outgoing-connections-established) Geen
.NET CLR Networking\Datagrams Received System.Net.Sockets\Datagrams Received (datagrams-received) Geen
.NET CLR Networking\Datagrams Sent System.Net.Sockets\Datagrams Sent (datagrams-sent) Geen

DNS-netwerktellers

Prestatiecounter van Windows EventCounter-equivalent Equivalent van api voor metrische gegevens
.NET CLR Networking\DNS Lookups System.Net.NameResolution\DNS Lookups Requested (dns-lookups-requested) De histogram-bakken optellen in 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

HttpWebRequest-tellers

HttpWebRequest is vervangen door HttpClient. Zie de HttpClient EventCounters en System.Diagnostics.Metrics voor meer informatie over de ingebouwde metrische gegevens.

ASP.NET tellers

ASP.NET is aanzienlijk veranderd tussen .NET Framework en .NET Core. Veel tellers zijn verouderd of worden anders gemeten dan in het verleden. Zie de ASP.NET EventCounters en System.Diagnostics.Metrics voor meer informatie over de ingebouwde metrische gegevens.

Volgende stappen