Prestatiemeteritems onderzoeken (dotnet-tellers)
Dit artikel is van toepassing op: ✔️ dotnet-counters
versie 3.0.47001 en latere versies
Installeren
Er zijn twee manieren om te downloaden en te installeren dotnet-counters
:
dotnet global tool:
Als u de nieuwste releaseversie van het
dotnet-counters
NuGet-pakket wilt installeren, gebruikt u de opdracht dotnet tool install :dotnet tool install --global dotnet-counters
Direct downloaden:
Download het uitvoerbare hulpprogramma dat overeenkomt met uw platform:
Besturingssysteem Platform Windows x86 | x64 | Arm | Arm-x64 Linux x64 | Arm | 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.
Synopsis
dotnet-counters [-h|--help] [--version] <command>
Beschrijving
dotnet-counters
is een hulpprogramma voor prestatiebewaking voor ad-hocstatusbewaking en prestatieonderzoek op het eerste niveau. Het kan waarden voor prestatiemeteritems bekijken die zijn gepubliceerd via de EventCounter API of de Meter API. U kunt bijvoorbeeld snel zaken controleren, 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 meer serieus prestatieonderzoek doet met behulp van PerfView
of dotnet-trace
.
Opties
--version
Geeft de versie van het hulpprogramma dotnet-tellers weer.
-h|--help
Hiermee wordt de help voor de opdrachtregel weergegeven.
Opdracht
Opdracht |
---|
dotnet-tellers verzamelen |
dotnet-counters list |
dotnet-tellers monitor |
dotnet-counters ps |
dotnet-tellers verzamelen
Verzamel periodiek geselecteerde tellerwaarden en exporteer deze naar een opgegeven bestandsindeling voor naverwerking.
Synopsis
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 Using diagnostic port (Diagnostische poort gebruiken ) voor informatie over het gebruik van deze optie om te beginnen met het bewaken van tellers 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 deprovider_name
wordt gebruikt zonder een in aanmerking komende lijst met tellers, worden alle tellers van de provider weergegeven. Gebruik de opdracht dotnet-counters list om namen van providers en tellers te detecteren. Voor EventCountersprovider_name
is 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>
(alleen voor doeltoepassingen met .NET 5 of hoger)Na de configuratieparameters voor de verzameling kan de gebruiker toevoegen
--
, gevolgd door een opdracht om een .NET-toepassing te starten met ten minste een 5.0-runtime.dotnet-counters
start een proces met de opgegeven opdracht en verzamelt de aangevraagde metrische gegevens. Dit is vaak handig voor het verzamelen van metrische gegevens voor het opstartpad van de toepassing en kan worden gebruikt voor het diagnosticeren of bewaken van problemen die zich vroeg vóór of kort na het hoofdinvoerpunt voordoen.Notitie
Met deze optie bewaakt u het eerste .NET 5-proces dat terug communiceert met het hulpprogramma. Dit betekent dat als met uw opdracht meerdere .NET-toepassingen worden gestart, alleen de eerste app wordt verzameld. Daarom is het raadzaam deze optie te gebruiken voor zelfstandige toepassingen of de
dotnet exec <app.dll>
optie te gebruiken.Notitie
Als u een .NET-uitvoerbaar bestand start via dotnet-tellers, wordt de invoer/uitvoer ervan omgeleid en kunt u niet werken met de stdin/stdout. Als u het hulpprogramma afsluit via Ctrl+C of SIGTERM, wordt zowel het gereedschap als het onderliggende proces veilig beëindigd. Als het onderliggende proces vóór het hulpprogramma wordt afgesloten, wordt het hulpprogramma ook afgesloten en moet de tracering veilig zichtbaar zijn. 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 dat de doeltoepassing en dotnet-counters
dezelfde TMPDIR
omgevingsvariabele delen. Anders treedt er een time-out op voor de opdracht.
Notitie
Als u metrische gegevens wilt verzamelen met , dotnet-counters
moet deze worden uitgevoerd als dezelfde gebruiker als de gebruiker die het doelproces uitvoert 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 bij 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
dotnet-counters list
Geeft een lijst weer met tellernamen en beschrijvingen, gegroepeerd op provider.
Synopsis
dotnet-counters list [-h|--help]
Voorbeeld
> 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-tellers monitor
Hiermee worden de waarden van geselecteerde tellers periodiek vernieuwd.
Synopsis
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 Using diagnostic port (Diagnostische poort gebruiken ) voor informatie over het gebruik van deze optie om te beginnen met het bewaken van tellers 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 deprovider_name
wordt gebruikt zonder een in aanmerking komende lijst met tellers, worden alle tellers van de provider weergegeven. Gebruik de opdracht dotnet-counters list om namen van providers en tellers te detecteren. Voor EventCountersprovider_name
is de naam van de EventSource en voor Metersprovider_name
de naam van de meter.
-- <command>
(alleen voor doeltoepassingen met .NET 5 of hoger)
Na de configuratieparameters voor de verzameling kan de gebruiker toevoegen --
, gevolgd door een opdracht om een .NET-toepassing te starten met ten minste een 5.0-runtime. dotnet-counters
start een proces met de opgegeven opdracht en bewaakt de aangevraagde metrische gegevens. Dit is vaak handig voor het verzamelen van metrische gegevens voor het opstartpad van de toepassing en kan worden gebruikt voor het diagnosticeren of bewaken van problemen die zich vroeg vóór of kort na het hoofdinvoerpunt voordoen.
Notitie
Met deze optie bewaakt u het eerste .NET 5-proces dat terug communiceert met het hulpprogramma. Dit betekent dat als met uw opdracht meerdere .NET-toepassingen worden gestart, alleen de eerste app wordt verzameld. Daarom is het raadzaam deze optie te gebruiken voor zelfstandige toepassingen of de dotnet exec <app.dll>
optie te gebruiken.
Notitie
Als u een .NET-uitvoerbaar bestand start via dotnet-tellers, wordt de invoer/uitvoer ervan omgeleid en kunt u niet werken met de stdin/stdout. Als u het hulpprogramma afsluit via Ctrl+C of SIGTERM, wordt zowel het gereedschap als het onderliggende proces veilig beëindigd. Als het onderliggende proces vóór 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 dat de doeltoepassing en dotnet-counters
dezelfde TMPDIR
omgevingsvariabele delen.
Notitie
Als u metrische gegevens wilt bewaken met behulp van dotnet-counters
, moet deze worden uitgevoerd als dezelfde gebruiker als de gebruiker die het doelproces uitvoert of als hoofdmap.
Notitie
Als u een foutbericht ziet dat lijkt op het volgende foutbericht: [ERROR] System.ComponentModel.Win32Exception (299): A 32 bit processes cannot access modules of a 64 bit process.
, probeert u te gebruiken dotnet-counters
die een niet-overeenkomende bititeit heeft voor het doelproces. Zorg ervoor dat u de juiste bitness van het hulpprogramma downloadt in de installatiekoppeling .
Voorbeelden
Bewaak alle tellers vanaf
System.Runtime
met 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
Bewaak alleen het CPU-gebruik en de GC-heapgrootte van
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
EventCounter
bewaken van door de gebruiker gedefinieerdeEventSource
. 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 in
dotnet-counters
voor .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 (alleen.NET 5 of hoger):Belangrijk
Dit werkt alleen voor apps met .NET 5 of hoger.
> 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 GC-heapgrootte vanaf het opstarten (alleen.NET 5 of hoger):Belangrijk
Dit werkt alleen voor apps met .NET 5 of hoger.
> 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.
Synopsis
dotnet-counters ps [-h|--help]
Voorbeeld
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
Belangrijk
Dit werkt alleen voor apps met .NET 5 of hoger.
Diagnostische poort is een runtime-functie die is toegevoegd in .NET 5 waarmee u meteritems kunt controleren of verzamelen vanaf het opstarten van de app. Als u dit wilt doen met dotnet-counters
, kunt u gebruiken dotnet-counters <collect|monitor> -- <command>
zoals beschreven in de bovenstaande voorbeelden of de --diagnostic-port
optie gebruiken.
Het dotnet-counters <collect|monitor> -- <command>
starten van de toepassing als een onderliggend proces is de eenvoudigste manier om deze snel te controleren vanaf het opstarten.
Als u echter meer controle wilt krijgen over de levensduur van de app die wordt bewaakt (bewaak bijvoorbeeld de app alleen de eerste tien minuten en ga verder met uitvoeren) of als u met de app moet communiceren met behulp van de CLI, kunt u met behulp --diagnostic-port
van optie zowel de doel-app beheren die wordt bewaakt dotnet-counters
als .
Met de onderstaande opdracht worden dotnet-tellers een diagnostische socket met de naam gemaakt
myport.sock
en wordt er gewacht 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 de doeltoepassing in een afzonderlijke console met de omgevingsvariabele
DOTNET_DiagnosticPorts
ingesteld op de waarde in dedotnet-counters
uitvoer.export DOTNET_DiagnosticPorts=/home/user/myport.sock ./my-dotnet-app arg1 arg2
Dit moet dan inschakelen
dotnet-counters
om te beginnen met het verzamelen van tellers 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 veel onderliggende processen kan veroorzaken die niet uw app zijn en ze verbinding kunnen makendotnet-counters
vóór uw app, waardoor uw app tijdens runtime wordt onderbroken. Het wordt aanbevolen om rechtstreeks een zelfstandige versie van de app te gebruiken of te gebruikendotnet exec
om de toepassing te starten.
Feedback
https://aka.ms/ContentUserFeedback.
Binnenkort beschikbaar: In de loop van 2024 zullen we GitHub-problemen geleidelijk uitfaseren als het feedbackmechanisme voor inhoud en deze vervangen door een nieuw feedbacksysteem. Zie voor meer informatie:Feedback verzenden en weergeven voor