Prestatiemeteritems onderzoeken (dotnet-counters)
Dit artikel is van toepassing op: ✔️ dotnet-counters
versie 3.0.47001 en nieuwere versies.
Tellers kunnen worden gelezen uit toepassingen met .NET 5 of hoger.
Installeren
Er zijn twee manieren om te downloaden en installeren dotnet-counters
:
dotnet global tool:
Als u de nieuwste versie van het NuGet-pakket wilt installeren, gebruikt u de installatieopdracht van het
dotnet-counters
dotnet-hulpprogramma:dotnet tool install --global dotnet-counters
Directe download:
Download het uitvoerbare hulpprogramma dat overeenkomt met uw platform:
Besturingssysteem Platform Windows x86 x64 | Arm-x64 | | Linux x64 | Arm64 | | musl-x64 | musl-Arm64
Notitie
Als u een x86-app wilt gebruiken dotnet-counters
, hebt u een bijbehorende x86-versie van het hulpprogramma nodig.
Samenvatting
dotnet-counters [-h|--help] [--version] <command>
Beschrijving
dotnet-counters
is een hulpprogramma voor prestatiebewaking voor ad-hocstatusbewaking en prestatieonderzoek op het eerste niveau. U kunt prestatiemeteritems bekijken die zijn gepubliceerd via de EventCounter API of de Meter API. U kunt bijvoorbeeld snel zaken bewaken zoals het CPU-gebruik of de frequentie van uitzonderingen die worden gegenereerd in uw .NET Core-toepassing om te zien of er iets verdachts is voordat u ingaat op een ernstiger prestatieonderzoek met behulp van PerfView
of dotnet-trace
.
Opties
--version
Geeft de versie van het hulpprogramma dotnet-counters weer.
-h|--help
Toont opdrachtregelhulp.
Opdracht
Opdracht |
---|
dotnet-counters verzamelen |
lijst met dotnet-tellers |
dotnet-counters monitor |
dotnet-counters ps |
dotnet-counters verzamelen
Verzamel regelmatig geselecteerde tellerwaarden en exporteer ze naar een opgegeven bestandsindeling voor naverwerking.
Samenvatting
dotnet-counters collect [-h|--help] [-p|--process-id] [-n|--name] [--diagnostic-port] [--refresh-interval] [--counters <COUNTERS>] [--format] [-o|--output] [-- <command>]
Opties
-p|--process-id <PID>
De id van het proces waaruit tellergegevens moeten worden verzameld.
-n|--name <name>
De naam van het proces waaruit tellergegevens moeten worden verzameld.
--diagnostic-port
De naam van de diagnostische poort die moet worden gemaakt. Zie het gebruik van diagnostische poort voor het gebruik van deze optie om bewakingstellers te starten vanaf het opstarten van de app.
--refresh-interval <SECONDS>
Het aantal seconden dat moet worden vertraagd tussen het bijwerken van de weergegeven tellers
--counters <COUNTERS>
Een door komma's gescheiden lijst met tellers. Tellers kunnen worden opgegeven
provider_name[:counter_name]
. Als hetprovider_name
wordt gebruikt zonder een in aanmerking komende lijst met tellers, worden alle tellers van de provider weergegeven. Als u provider- en tellernamen wilt detecteren, gebruikt u de opdracht dotnet-counters list . Voor EventCountersprovider_name
is dit de naam van de EventSource en voor Metersprovider_name
de naam van de meter.--format <csv|json>
De indeling die moet worden geëxporteerd. Momenteel beschikbaar: csv, json.
-o|--output <output>
De naam van het uitvoerbestand.
-- <command>
Na de configuratieparameters van de verzameling kan de gebruiker worden toegevoegd
--
, gevolgd door een opdracht om een .NET-toepassing te starten.dotnet-counters
start een proces met de opgegeven opdracht en verzamelt de aangevraagde metrische gegevens. Dit is vaak handig om metrische gegevens te verzamelen voor het opstartpad van de toepassing en kan worden gebruikt om problemen te diagnosticeren of bewaken die vroeg vóór of kort na het hoofdinvoerpunt optreden.Notitie
Met deze optie wordt het eerste .NET-proces bewaakt dat met het hulpprogramma communiceert. Dit betekent dat als uw opdracht meerdere .NET-toepassingen start, alleen de eerste app wordt verzameld. Daarom is het raadzaam deze optie te gebruiken voor zelfstandige toepassingen of het gebruik van de
dotnet exec <app.dll>
optie.Notitie
Als u een uitvoerbaar .NET-bestand start via dotnet-tellers, wordt de invoer/uitvoer omgeleid en kunt u niet communiceren met de stdin/stdout. Als u het hulpprogramma afsluit via Ctrl+C of SIGTERM, worden zowel het hulpprogramma als het onderliggende proces veilig beëindigd. Als het onderliggende proces wordt afgesloten voordat het hulpprogramma wordt afgesloten, wordt het hulpprogramma ook afgesloten. Als u stdin/stdout wilt gebruiken, kunt u de
--diagnostic-port
optie gebruiken. Zie Diagnostische poort gebruiken voor meer informatie.
Notitie
In Linux en macOS verwacht deze opdracht de doeltoepassing en dotnet-counters
deelt deze dezelfde TMPDIR
omgevingsvariabele. Anders treedt er een time-out op voor de opdracht.
Notitie
Als u metrische gegevens wilt verzamelen met behulp dotnet-counters
van, moet deze worden uitgevoerd als dezelfde gebruiker als het doelproces van de gebruiker of als hoofdmap. Anders kan het hulpprogramma geen verbinding maken met het doelproces.
Voorbeelden
Verzamel alle tellers met een vernieuwingsinterval van 3 seconden en genereer een CSV als uitvoer:
> 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.
Start
dotnet mvc.dll
als een onderliggend proces en begin met het verzamelen van runtimetellers en ASP.NET Core Hosting-tellers van het opstarten en sla deze op als JSON-uitvoer:> 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
lijst met dotnet-tellers
Geeft een lijst weer met tellernamen en beschrijvingen, gegroepeerd op provider.
Samenvatting
dotnet-counters list [-h|--help]
Opmerking
> 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
Notitie
De Microsoft.AspNetCore.Hosting
tellers worden weergegeven wanneer er processen zijn geïdentificeerd die deze tellers ondersteunen, bijvoorbeeld wanneer een ASP.NET Core-toepassing wordt uitgevoerd op de hostcomputer.
dotnet-counters monitor
Geeft periodiek het vernieuwen van waarden van geselecteerde tellers weer.
Samenvatting
dotnet-counters monitor [-h|--help] [-p|--process-id] [-n|--name] [--diagnostic-port] [--refresh-interval] [--counters] [-- <command>]
Opties
-p|--process-id <PID>
De id van het proces dat moet worden bewaakt.
-n|--name <name>
De naam van het proces dat moet worden bewaakt.
--diagnostic-port
De naam van de diagnostische poort die moet worden gemaakt. Zie het gebruik van diagnostische poort voor het gebruik van deze optie om bewakingstellers te starten vanaf het opstarten van de app.
--refresh-interval <SECONDS>
Het aantal seconden dat moet worden vertraagd tussen het bijwerken van de weergegeven tellers
--counters <COUNTERS>
Een door komma's gescheiden lijst met tellers. Tellers kunnen worden opgegeven
provider_name[:counter_name]
. Als hetprovider_name
wordt gebruikt zonder een in aanmerking komende lijst met tellers, worden alle tellers van de provider weergegeven. Als u provider- en tellernamen wilt detecteren, gebruikt u de opdracht dotnet-counters list . Voor EventCountersprovider_name
is dit de naam van de EventSource en voor Metersprovider_name
de naam van de meter.
-- <command>
Na de configuratieparameters van de verzameling kan de gebruiker worden toegevoegd --
, gevolgd door een opdracht om een .NET-toepassing te starten. dotnet-counters
start een proces met de opgegeven opdracht en bewaakt de aangevraagde metrische gegevens. Dit is vaak handig om metrische gegevens te verzamelen voor het opstartpad van de toepassing en kan worden gebruikt om problemen te diagnosticeren of bewaken die vroeg vóór of kort na het hoofdinvoerpunt optreden.
Notitie
Met deze optie wordt het eerste .NET-proces bewaakt dat met het hulpprogramma communiceert. Dit betekent dat als uw opdracht meerdere .NET-toepassingen start, alleen de eerste app wordt verzameld. Daarom is het raadzaam deze optie te gebruiken voor zelfstandige toepassingen of het gebruik van de dotnet exec <app.dll>
optie.
Notitie
Als u een uitvoerbaar .NET-bestand start via dotnet-tellers, wordt de invoer/uitvoer omgeleid en kunt u niet communiceren met de stdin/stdout. Als u het hulpprogramma afsluit via Ctrl+C of SIGTERM, worden zowel het hulpprogramma als het onderliggende proces veilig beëindigd. Als het onderliggende proces wordt afgesloten voordat het hulpprogramma wordt afgesloten, wordt het hulpprogramma ook afgesloten. Als u stdin/stdout wilt gebruiken, kunt u de --diagnostic-port
optie gebruiken. Zie Diagnostische poort gebruiken voor meer informatie.
Notitie
In Linux en macOS verwacht deze opdracht de doeltoepassing en dotnet-counters
deelt deze dezelfde TMPDIR
omgevingsvariabele.
Notitie
Als u metrische gegevens dotnet-counters
wilt bewaken, moet deze worden uitgevoerd als dezelfde gebruiker als het doelproces van de gebruiker of als hoofdmap.
Notitie
Als u een foutbericht ziet dat lijkt op de volgende: [ERROR] System.ComponentModel.Win32Exception (299): A 32 bit processes cannot access modules of a 64 bit process.
u probeert te gebruiken dotnet-counters
die niet-overeenkomende bitness heeft ten opzichte van het doelproces. Zorg ervoor dat u de juiste bitness van het hulpprogramma downloadt in de installatiekoppeling .
Voorbeelden
Alle tellers bewaken vanaf
System.Runtime
een vernieuwingsinterval van 3 seconden:> 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
Alleen CPU-gebruik en GC-heapgrootte bewaken vanaf
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
Waarden bewaken
EventCounter
van door de gebruiker gedefinieerdeEventSource
waarden. Zie Zelfstudie: Prestaties meten met EventCounters in .NET Core voor meer informatie.> dotnet-counters monitor --process-id 1902 --counters Samples-EventCounterDemos-Minimal Press p to pause, r to resume, q to quit. request 100
Bekijk alle bekende tellers die beschikbaar zijn in
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
Bekijk alle bekende tellers die beschikbaar zijn voor
dotnet-counters
.NET 5-apps:> 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
Start
my-aspnet-server.exe
en bewaak het aantal assembly's dat is geladen vanaf het opstarten:> 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
Start
my-aspnet-server.exe
metarg1
enarg2
als opdrachtregelargumenten en bewaak de werkset en de grootte van de GC-heap vanaf het opstarten:> 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
Een lijst met de dotnet-processen die kunnen worden bewaakt door dotnet-counters
.
dotnet-counters
versie 6.0.320703 en hoger, geeft ook de opdrachtregelargumenten weer waarmee elk proces is gestart, indien beschikbaar.
Samenvatting
dotnet-counters ps [-h|--help]
Opmerking
Stel dat u een langlopende app start met behulp van de opdracht dotnet run --configuration Release
. In een ander venster voert u de dotnet-counters ps
opdracht uit. De uitvoer die u ziet, is als volgt. De opdrachtregelargumenten, indien aanwezig, worden weergegeven in dotnet-counters
versie 6.0.320703 en hoger.
> dotnet-counters ps
21932 dotnet C:\Program Files\dotnet\dotnet.exe run --configuration Release
36656 dotnet C:\Program Files\dotnet\dotnet.exe
Diagnostische poort gebruiken
Diagnostische poort is een runtime-functie waarmee u kunt beginnen met het bewaken of verzamelen van tellers van het opstarten van de app. Als u dit wilt doen, dotnet-counters
kunt u deze gebruiken dotnet-counters <collect|monitor> -- <command>
zoals beschreven in de bovenstaande voorbeelden of de --diagnostic-port
optie gebruiken.
Het gebruik dotnet-counters <collect|monitor> -- <command>
om de toepassing als een onderliggend proces te starten, is de eenvoudigste manier om deze snel te controleren vanaf het opstarten.
Als u echter een nauwkeurigere controle wilt krijgen over de levensduur van de app die wordt bewaakt (bijvoorbeeld de app gedurende de eerste 10 minuten bewaken en doorgaan met uitvoeren) of als u met de CLI wilt communiceren met de app, kunt u met behulp van --diagnostic-port
de optie zowel de doel-app beheren die wordt bewaakt als dotnet-counters
.
Met de onderstaande opdracht maakt u dotnet-tellers een diagnostische socket met de naam
myport.sock
en wacht u op een verbinding.dotnet-counters collect --diagnostic-port myport.sock
Uitvoer:
Waiting for connection on myport.sock Start an application with the following environment variable: DOTNET_DiagnosticPorts=/home/user/myport.sock
Start in een afzonderlijke console de doeltoepassing met de omgevingsvariabele
DOTNET_DiagnosticPorts
die is ingesteld op de waarde in dedotnet-counters
uitvoer.export DOTNET_DiagnosticPorts=/home/user/myport.sock ./my-dotnet-app arg1 arg2
Dit moet vervolgens inschakelen
dotnet-counters
om het verzamelen van tellers te starten opmy-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.
Belangrijk
Het starten van uw app met
dotnet run
kan problematisch zijn omdat de dotnet CLI mogelijk veel onderliggende processen veroorzaakt die niet uw app zijn en waarmee ze verbinding kunnen makendotnet-counters
voordat uw app wordt uitgevoerd, waardoor uw app tijdens runtime wordt onderbroken. Het wordt aanbevolen om rechtstreeks een zelfstandige versie van de app te gebruikendotnet exec
of om de toepassing te starten.