Undersöka prestandaräknare (dotnet-räknare)
Den här artikeln gäller för version ✔️ dotnet-counters
3.0.47001 och senare versioner.
Räknare kan läsas från program som kör .NET 5 eller senare.
Installera
Det finns två sätt att ladda ned och installera dotnet-counters
:
dotnet global tool:
Om du vill installera den senaste versionen av
dotnet-counters
NuGet-paketet använder du installationskommandot för dotnet-verktyget:dotnet tool install --global dotnet-counters
Direkt nedladdning:
Ladda ned det körbara verktyget som matchar din plattform:
OS Plattform Windows x86 | x64 | Arm | Arm-x64 Linux x64 | Arm | Arm64 | musl-x64 | musl-Arm64
Kommentar
Om du vill använda dotnet-counters
en x86-app behöver du en motsvarande x86-version av verktyget.
Sammanfattning
dotnet-counters [-h|--help] [--version] <command>
beskrivning
dotnet-counters
är ett prestandaövervakningsverktyg för ad hoc-hälsoövervakning och prestandaundersökning på första nivån. Den kan observera prestandaräknarens värden som publiceras via API:et EventCounter eller API:et Meter . Du kan till exempel snabbt övervaka saker som cpu-användning eller antalet undantag som genereras i .NET Core-programmet för att se om det finns något misstänkt innan du går in på allvarligare prestandaundersökningar med hjälp av PerfView
eller dotnet-trace
.
Alternativ
--version
Visar versionen av verktyget dotnet-counters.
-h|--help
Visar kommandoradshjälp.
Kommandon
Command |
---|
dotnet-counters samlar in |
dotnet-counters-lista |
dotnet-counters monitor |
dotnet-counters ps |
dotnet-counters samlar in
Samla regelbundet in valda räknarvärden och exportera dem till ett angivet filformat för efterbearbetning.
Sammanfattning
dotnet-counters collect [-h|--help] [-p|--process-id] [-n|--name] [--diagnostic-port] [--refresh-interval] [--counters <COUNTERS>] [--format] [-o|--output] [-- <command>]
Alternativ
-p|--process-id <PID>
ID:t för den process som du vill samla in motdata från.
-n|--name <name>
Namnet på den process som räknardata ska samlas in från.
--diagnostic-port
Namnet på diagnostikporten som ska skapas. Mer information om hur du använder det här alternativet för att starta övervakningsräknare från appstart finns i Använda diagnostikport .
--refresh-interval <SECONDS>
Antalet sekunder som ska fördröjas mellan uppdatering av de visade räknarna
--counters <COUNTERS>
En kommaavgränsad lista över räknare. Räknare kan anges
provider_name[:counter_name]
.provider_name
Om används utan en kvalificerande lista över räknare visas alla räknare från providern. Om du vill identifiera provider- och räknarnamn använder du listkommandot dotnet-counters. För EventCountersprovider_name
är namnet på EventSource och för Meter,provider_name
namnet på mätaren.--format <csv|json>
Det format som ska exporteras. För närvarande tillgänglig: csv, json.
-o|--output <output>
Namnet på utdatafilen.
-- <command>
Efter insamlingskonfigurationsparametrarna kan användaren lägga till
--
följt av ett kommando för att starta ett .NET-program.dotnet-counters
startar en process med det angivna kommandot och samlar in de begärda måtten. Detta är ofta användbart för att samla in mått för programmets startsökväg och kan användas för att diagnostisera eller övervaka problem som inträffar tidigt före eller strax efter huvudinmatningspunkten.Kommentar
Med det här alternativet övervakas den första .NET-processen som kommunicerar tillbaka till verktyget, vilket innebär att om kommandot startar flera .NET-program samlar det bara in den första appen. Därför rekommenderar vi att du använder det här alternativet i fristående program eller med hjälp av alternativet
dotnet exec <app.dll>
.Kommentar
Om du startar en .NET-körbar fil via dotnet-räknare omdirigeras dess indata/utdata och du kommer inte att kunna interagera med dess stdin/stdout. Om du avslutar verktyget via CTRL+C eller SIGTERM avslutas både verktyget och den underordnade processen på ett säkert sätt. Om den underordnade processen avslutas innan verktyget avslutas även verktyget. Om du behöver använda stdin/stdout kan du använda alternativet
--diagnostic-port
. Mer information finns i Använda diagnostikport .
Kommentar
I Linux och macOS förväntar sig det här kommandot målprogrammet och dotnet-counters
delar samma TMPDIR
miljövariabel. Annars överskrider kommandot tidsgränsen.
Kommentar
Om du vill samla in mått med måste dotnet-counters
den köras som samma användare som användaren som kör målprocessen eller som rot. Annars kan verktyget inte upprätta en anslutning till målprocessen.
Exempel
Samla in alla räknare med ett uppdateringsintervall på 3 sekunder och generera en csv som utdata:
> dotnet-counters collect --process-id 1902 --refresh-interval 3 --format csv --counters is unspecified. Monitoring System.Runtime counters by default. Starting a counter session. Press Q to quit.
Starta
dotnet mvc.dll
som en underordnad process och börja samla in runtime-räknare och ASP.NET Core Hosting-räknare från start och spara dem som JSON-utdata:> dotnet-counters collect --format json --counters System.Runtime,Microsoft.AspNetCore.Hosting -- dotnet mvc.dll Starting a counter session. Press Q to quit. File saved to counter.json
dotnet-counters-lista
Visar en lista över räknarnamn och beskrivningar, grupperade efter provider.
Sammanfattning
dotnet-counters list [-h|--help]
Exempel
> dotnet-counters list
Showing well-known counters only. Specific processes may support additional counters.
System.Runtime
cpu-usage Amount of time the process has utilized the CPU (ms)
working-set Amount of working set used by the process (MB)
gc-heap-size Total heap size reported by the GC (MB)
gen-0-gc-count Number of Gen 0 GCs per interval
gen-1-gc-count Number of Gen 1 GCs per interval
gen-2-gc-count Number of Gen 2 GCs per interval
time-in-gc % time in GC since the last GC
gen-0-size Gen 0 Heap Size
gen-1-size Gen 1 Heap Size
gen-2-size Gen 2 Heap Size
loh-size LOH Heap Size
alloc-rate Allocation Rate
assembly-count Number of Assemblies Loaded
exception-count Number of Exceptions per interval
threadpool-thread-count Number of ThreadPool Threads
monitor-lock-contention-count Monitor Lock Contention Count
threadpool-queue-length ThreadPool Work Items Queue Length
threadpool-completed-items-count ThreadPool Completed Work Items Count
active-timer-count Active Timers Count
Microsoft.AspNetCore.Hosting
requests-per-second Request rate
total-requests Total number of requests
current-requests Current number of requests
failed-requests Failed number of requests
Kommentar
Räknarna Microsoft.AspNetCore.Hosting
visas när det finns processer som identifieras som stöder dessa räknare, till exempel när ett ASP.NET Core-program körs på värddatorn.
dotnet-counters monitor
Visar regelbundet uppdateringsvärden för valda räknare.
Sammanfattning
dotnet-counters monitor [-h|--help] [-p|--process-id] [-n|--name] [--diagnostic-port] [--refresh-interval] [--counters] [-- <command>]
Alternativ
-p|--process-id <PID>
ID för den process som ska övervakas.
-n|--name <name>
Namnet på den process som ska övervakas.
--diagnostic-port
Namnet på diagnostikporten som ska skapas. Mer information om hur du använder det här alternativet för att starta övervakningsräknare från appstart finns i Använda diagnostikport .
--refresh-interval <SECONDS>
Antalet sekunder som ska fördröjas mellan uppdatering av de visade räknarna
--counters <COUNTERS>
En kommaavgränsad lista över räknare. Räknare kan anges
provider_name[:counter_name]
.provider_name
Om används utan en kvalificerande lista över räknare visas alla räknare från providern. Om du vill identifiera provider- och räknarnamn använder du listkommandot dotnet-counters. För EventCountersprovider_name
är namnet på EventSource och för Meter,provider_name
namnet på mätaren.
-- <command>
Efter insamlingskonfigurationsparametrarna kan användaren lägga till --
följt av ett kommando för att starta ett .NET-program. dotnet-counters
startar en process med det angivna kommandot och övervakar de begärda måtten. Detta är ofta användbart för att samla in mått för programmets startsökväg och kan användas för att diagnostisera eller övervaka problem som inträffar tidigt före eller strax efter huvudinmatningspunkten.
Kommentar
Med det här alternativet övervakas den första .NET-processen som kommunicerar tillbaka till verktyget, vilket innebär att om kommandot startar flera .NET-program samlar det bara in den första appen. Därför rekommenderar vi att du använder det här alternativet i fristående program eller med hjälp av alternativet dotnet exec <app.dll>
.
Kommentar
Om du startar en .NET-körbar fil via dotnet-räknare omdirigeras dess indata/utdata och du kommer inte att kunna interagera med dess stdin/stdout. Om du avslutar verktyget via CTRL+C eller SIGTERM avslutas både verktyget och den underordnade processen på ett säkert sätt. Om den underordnade processen avslutas innan verktyget avslutas även verktyget. Om du behöver använda stdin/stdout kan du använda alternativet --diagnostic-port
. Mer information finns i Använda diagnostikport .
Kommentar
I Linux och macOS förväntar sig det här kommandot målprogrammet och dotnet-counters
delar samma TMPDIR
miljövariabel.
Kommentar
Om du vill övervaka mått med hjälp av dotnet-counters
måste den köras som samma användare som användaren som kör målprocessen eller som rot.
Kommentar
Om du ser ett felmeddelande som liknar följande: [ERROR] System.ComponentModel.Win32Exception (299): A 32 bit processes cannot access modules of a 64 bit process.
försöker du använda dotnet-counters
som har matchningsfel mot målprocessen. Se till att ladda ned rätt bitness för verktyget i installationslänken.
Exempel
Övervaka alla räknare från
System.Runtime
med ett uppdateringsintervall på 3 sekunder:> dotnet-counters monitor --process-id 1902 --refresh-interval 3 --counters System.Runtime Press p to pause, r to resume, q to quit. Status: Running [System.Runtime] % Time in GC since last GC (%) 0 Allocation Rate (B / 1 sec) 5,376 CPU Usage (%) 0 Exception Count (Count / 1 sec) 0 GC Fragmentation (%) 48.467 GC Heap Size (MB) 0 Gen 0 GC Count (Count / 1 sec) 1 Gen 0 Size (B) 24 Gen 1 GC Count (Count / 1 sec) 1 Gen 1 Size (B) 24 Gen 2 GC Count (Count / 1 sec) 1 Gen 2 Size (B) 272,000 IL Bytes Jitted (B) 19,449 LOH Size (B) 19,640 Monitor Lock Contention Count (Count / 1 sec) 0 Number of Active Timers 0 Number of Assemblies Loaded 7 Number of Methods Jitted 166 POH (Pinned Object Heap) Size (B) 24 ThreadPool Completed Work Item Count (Count / 1 sec) 0 ThreadPool Queue Length 0 ThreadPool Thread Count 2 Working Set (MB) 19
Övervaka bara CPU-användning och GC-heapstorlek från
System.Runtime
:> dotnet-counters monitor --process-id 1902 --counters System.Runtime[cpu-usage,gc-heap-size] Press p to pause, r to resume, q to quit. Status: Running [System.Runtime] CPU Usage (%) 24 GC Heap Size (MB) 811
Övervaka
EventCounter
värden från användardefinieradeEventSource
. Mer information finns i Självstudie: Mäta prestanda med EventCounters i .NET Core.> dotnet-counters monitor --process-id 1902 --counters Samples-EventCounterDemos-Minimal Press p to pause, r to resume, q to quit. request 100
Visa alla välkända räknare som är tillgängliga i
dotnet-counters
:> dotnet-counters list Showing well-known counters for .NET (Core) version 3.1 only. Specific processes may support additional counters. System.Runtime cpu-usage The percent of process' CPU usage relative to all of the system CPU resources [0-100] working-set Amount of working set used by the process (MB) gc-heap-size Total heap size reported by the GC (MB) gen-0-gc-count Number of Gen 0 GCs between update intervals gen-1-gc-count Number of Gen 1 GCs between update intervals gen-2-gc-count Number of Gen 2 GCs between update intervals time-in-gc % time in GC since the last GC gen-0-size Gen 0 Heap Size gen-1-size Gen 1 Heap Size gen-2-size Gen 2 Heap Size loh-size LOH Size alloc-rate Number of bytes allocated in the managed heap between update intervals assembly-count Number of Assemblies Loaded exception-count Number of Exceptions / sec threadpool-thread-count Number of ThreadPool Threads monitor-lock-contention-count Number of times there were contention when trying to take the monitor lock between update intervals threadpool-queue-length ThreadPool Work Items Queue Length threadpool-completed-items-count ThreadPool Completed Work Items Count active-timer-count Number of timers that are currently active Microsoft.AspNetCore.Hosting requests-per-second Number of requests between update intervals total-requests Total number of requests current-requests Current number of requests failed-requests Failed number of requests
Visa alla välkända räknare som är tillgängliga i
dotnet-counters
för .NET 5-appar:> dotnet-counters list --runtime-version 5.0 Showing well-known counters for .NET (Core) version 5.0 only. Specific processes may support additional counters. System.Runtime cpu-usage The percent of process' CPU usage relative to all of the system CPU resources [0-100] working-set Amount of working set used by the process (MB) gc-heap-size Total heap size reported by the GC (MB) gen-0-gc-count Number of Gen 0 GCs between update intervals gen-1-gc-count Number of Gen 1 GCs between update intervals gen-2-gc-count Number of Gen 2 GCs between update intervals time-in-gc % time in GC since the last GC gen-0-size Gen 0 Heap Size gen-1-size Gen 1 Heap Size gen-2-size Gen 2 Heap Size loh-size LOH Size poh-size POH (Pinned Object Heap) Size alloc-rate Number of bytes allocated in the managed heap between update intervals gc-fragmentation GC Heap Fragmentation assembly-count Number of Assemblies Loaded exception-count Number of Exceptions / sec threadpool-thread-count Number of ThreadPool Threads monitor-lock-contention-count Number of times there were contention when trying to take the monitor lock between update intervals threadpool-queue-length ThreadPool Work Items Queue Length threadpool-completed-items-count ThreadPool Completed Work Items Count active-timer-count Number of timers that are currently active il-bytes-jitted Total IL bytes jitted methods-jitted-count Number of methods jitted Microsoft.AspNetCore.Hosting requests-per-second Number of requests between update intervals total-requests Total number of requests current-requests Current number of requests failed-requests Failed number of requests Microsoft-AspNetCore-Server-Kestrel connections-per-second Number of connections between update intervals total-connections Total Connections tls-handshakes-per-second Number of TLS Handshakes made between update intervals total-tls-handshakes Total number of TLS handshakes made current-tls-handshakes Number of currently active TLS handshakes failed-tls-handshakes Total number of failed TLS handshakes current-connections Number of current connections connection-queue-length Length of Kestrel Connection Queue request-queue-length Length total HTTP request queue System.Net.Http requests-started Total Requests Started requests-started-rate Number of Requests Started between update intervals requests-aborted Total Requests Aborted requests-aborted-rate Number of Requests Aborted between update intervals current-requests Current Requests
Starta
my-aspnet-server.exe
och övervaka antalet sammansättningar som lästs in från starten:> dotnet-counters monitor --counters System.Runtime[assembly-count] -- my-aspnet-server.exe Press p to pause, r to resume, q to quit. Status: Running [System.Runtime] Number of Assemblies Loaded 24
Starta
my-aspnet-server.exe
medarg1
ocharg2
som kommandoradsargument och övervaka dess arbetsuppsättning och GC-heapstorlek från starten:> dotnet-counters monitor --counters System.Runtime[working-set,gc-heap-size] -- my-aspnet-server.exe arg1 arg2
Press p to pause, r to resume, q to quit. Status: Running [System.Runtime] GC Heap Size (MB) 39 Working Set (MB) 59
dotnet-counters ps
Visar en lista över de dotnet-processer som kan övervakas av dotnet-counters
.
dotnet-counters
version 6.0.320703 och senare visar även de kommandoradsargument som varje process startades med, om den är tillgänglig.
Sammanfattning
dotnet-counters ps [-h|--help]
Exempel
Anta att du startar en tidskrävande app med kommandot dotnet run --configuration Release
. I ett annat fönster kör dotnet-counters ps
du kommandot . Utdata visas på följande sätt. Eventuella kommandoradsargument visas i dotnet-counters
version 6.0.320703 och senare.
> dotnet-counters ps
21932 dotnet C:\Program Files\dotnet\dotnet.exe run --configuration Release
36656 dotnet C:\Program Files\dotnet\dotnet.exe
Använda diagnostikport
Diagnostikport är en körningsfunktion som gör att du kan börja övervaka eller samla in räknare från appstart. Om du vill göra detta med kan dotnet-counters
du antingen använda dotnet-counters <collect|monitor> -- <command>
enligt beskrivningen i exemplen ovan eller använda alternativet --diagnostic-port
.
Att använda dotnet-counters <collect|monitor> -- <command>
för att starta programmet som en underordnad process är det enklaste sättet att snabbt övervaka det från starten.
Men när du vill få en finare kontroll över appens livslängd som övervakas (till exempel övervaka appen under de första 10 minuterna och fortsätta köra) eller om du behöver interagera med appen med hjälp av CLI kan du med hjälp av --diagnostic-port
alternativet styra både målappen som övervakas och dotnet-counters
.
Kommandot nedan gör att dotnet-counters skapar en diagnostik socket med namnet
myport.sock
och väntar på en anslutning.dotnet-counters collect --diagnostic-port myport.sock
Utdata:
Waiting for connection on myport.sock Start an application with the following environment variable: DOTNET_DiagnosticPorts=/home/user/myport.sock
Starta målprogrammet i en separat konsol med miljövariabeln
DOTNET_DiagnosticPorts
inställd på värdet idotnet-counters
utdata.export DOTNET_DiagnosticPorts=/home/user/myport.sock ./my-dotnet-app arg1 arg2
Detta bör sedan aktivera för
dotnet-counters
att börja samla in räknare påmy-dotnet-app
:Waiting for connection on myport.sock Start an application with the following environment variable: DOTNET_DiagnosticPorts=myport.sock Starting a counter session. Press Q to quit.
Viktigt!
Det kan vara problematiskt att starta din app med
dotnet run
eftersom dotnet CLI kan skapa många underordnade processer som inte är din app och de kan ansluta tilldotnet-counters
innan din app, vilket gör att appen pausas vid körning. Vi rekommenderar att du direkt använder en fristående version av appen eller använderdotnet exec
för att starta programmet.