Delen via


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:

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 het provider_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-countersvan, 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 het provider_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-counterswilt 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 gedefinieerde EventSourcewaarden. 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 met arg1 en arg2 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-counterskunt 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.

  1. 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
    
  2. Start in een afzonderlijke console de doeltoepassing met de omgevingsvariabele DOTNET_DiagnosticPorts die is ingesteld op de waarde in de dotnet-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 op 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.
    

    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 maken dotnet-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 gebruiken dotnet exec of om de toepassing te starten.