Kommentar
Åtkomst till den här sidan kräver auktorisering. Du kan prova att logga in eller ändra kataloger.
Åtkomst till den här sidan kräver auktorisering. Du kan prova att ändra kataloger.
.NET Framework-program, som endast körs i Windows, kan använda Prestandaräknare för Windows för att övervaka programmets hälsa och prestanda. I .NET Core och senare versioner tillhandahåller plattformen dock plattformsoberoende alternativ via API:erna EventCounters och System.Diagnostics.Metrics .
Den här artikeln innehåller vägledning om hur du migrerar från Windows-prestandaräknare till de nyare måttsystem som är tillgängliga i moderna .NET-versioner.
En kort historik över .NET-mått
.NET-program kan övervakas med olika mekanismer beroende på .NET-versionen och plattformen:
- .NET Framework: Använder främst Windows-prestandaräknare (endast Windows)
- .NET Core 3.0-3.1, .NET 5+: Introducerade EventCounters (plattformsoberoende) och inbyggda körningsmått, nätverksmått och ASP.NET mått med hjälp av dessa API:er
- .NET 6+: System.Diagnostics.Metrics API har lagts till (plattformsoberoende, OpenTelemetry-kompatibelt)
- .NET 8+: Inbyggda nätverksmått och ASP.NET mått har lagts till med hjälp av det nya API:et System.Diagnostics.Metrics
- .NET 9+: Inbyggda körningsmått har lagts till med hjälp av det nya API:et System.Diagnostics.Metrics
De nyare måttsystemen har flera fördelar:
- Plattformsoberoende åtgärd: Fungerar i Windows, Linux, macOS
- Containervänlig: Fungerar i containerbaserade miljöer
- Moderna verktyg: Integrerar med OpenTelemetry- och observerbarhetsplattformar
- Stöder kopieringsinstallation: Inga ytterligare installationssteg eller behörigheter krävs
Mer information finns i mått-API-jämförelsen.
Samla in metrik i moderna .NET-applikationer
Information om hur du samlar in och analyserar mått finns i guiderna System.Diagnostics.Metrics och EventCounters .
Mappa vanliga Prestandaräknare för Windows till moderna mått
Om övervakningssystemet för .NET Framework-programmet använder Windows Performance Counters som tillhandahålls av runtime måste du välja alternativa EventCounters- eller System.Diagnostics.Metrics-baserade mått istället. Följande tabeller visar alternativ för många vanliga räknare. Alla .NET Framework-räknare har inte portats till nya alternativ. I vissa fall upphörde ofta använda räknare, och i andra fall har implementeringsändringar på plattformen gjort vissa räknare irrelevanta.
Minnesräknare
| Prestandaräknare för Windows | EventCounter-motsvarighet | Motsvarande metrik-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 med attribut 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 med attribut 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 med attribut 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 (beräkna som procentandel av total tid) |
.NET CLR Memory\# Total committed Bytes |
Ingen | 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 med attribut gc.heap.generation=loh |
.NET CLR Memory\Allocated Bytes/sec |
System.Runtime\Allocation Rate (alloc-rate) |
Beräkna hastighet från System.Runtime\dotnet.gc.heap.total_allocated |
Anmärkning
dotnet.gc.pause.time tillåter en förbättrad beräkning som undviker vissa oönskade beteenden i det äldre % Time in GC måttet.
% Time in GC beräknade 100 * pause_time_in_most_recent_GC / time_between_most_recent_two_GCs. I vissa fall skulle två grupprincipobjekt uppstå mycket nära varandra och generera ett högt värde baserat på en liten icke-representativ del av det totala tidsintervallet.
gc.heap.pause.time ackumulerar den totala tid som GC har pausat programtrådar hittills i en process, vilket gör det möjligt att beräkna GC-paustiden under ett uppmätt tidsintervall. Detta är ett sannare mått på GC-omkostnader, men ändringen i beräkningen innebär att måtten kanske inte matchar även när det underliggande GC-beteendet är oförändrat.
JIT- och laddningsräknare
| Prestandaräknare för Windows | EventCounter-motsvarighet | Motsvarande metrik-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 |
Trådräknare
| Prestandaräknare för Windows | EventCounter-motsvarighet | Metrik-API motsvarighet |
|---|---|---|
.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) |
Beräkna hastighet från System.Runtime\dotnet.monitor.lock_contentions |
Undantagsräknare
| Prestandaräknare för Windows | EventCounter-motsvarighet | Motsvarande metrik-API |
|---|---|---|
.NET CLR Exceptions\# of Exceps Thrown / sec |
System.Runtime\Exception Count (exception-count) |
Beräkna hastighet från System.Runtime\dotnet.exceptions |
.NET CLR Exceptions\# of Exceps Thrown |
Ingen | System.Runtime\dotnet.exceptions |
Socket-nätverksräknare
| Prestandaräknare för Windows | EventCounter-motsvarighet | Motsvarande mått-API |
|---|---|---|
.NET CLR Networking\Bytes Received |
System.Net.Sockets\Bytes Received (bytes-received) |
Ingen |
.NET CLR Networking\Bytes Sent |
System.Net.Sockets\Bytes Sent (bytes-sent) |
Ingen |
.NET CLR Networking\Connections Established |
System.Net.Sockets\Outgoing Connections Established (outgoing-connections-established) |
Ingen |
.NET CLR Networking\Datagrams Received |
System.Net.Sockets\Datagrams Received (datagrams-received) |
Ingen |
.NET CLR Networking\Datagrams Sent |
System.Net.Sockets\Datagrams Sent (datagrams-sent) |
Ingen |
DNS-nätverksräknare
| Prestandaräknare för Windows | EventCounter-motsvarighet | Motsvarande metrik-API |
|---|---|---|
.NET CLR Networking\DNS Lookups |
System.Net.NameResolution\DNS Lookups Requested (dns-lookups-requested) |
Summera hinkarna i histogrammet i 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-räknare
HttpWebRequest har ersatts av HttpClient. Information om vilka mått som är inbyggda finns i HttpClient EventCounters och System.Diagnostics.Metrics.
ASP.NET räknare
ASP.NET har ändrats dramatiskt mellan .NET Framework och .NET Core. Många räknare är föråldrade eller mäts annorlunda än tidigare. Information om vilka mått som är inbyggda finns i ASP.NET EventCounters och System.Diagnostics.Metrics.
Nästa steg
- Läs mer om EventCounters i .NET
- Utforska API:et System.Diagnostics.Metrics
- Förstå hur du samlar in mått
- Granska välkända EventCounters och inbyggda mätvärden