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:

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 de provider_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-countersmoet 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 de provider_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 gedefinieerde EventSource. 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 met arg1 en arg2 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-countersals .

  1. 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
    
  2. Start de doeltoepassing in een afzonderlijke console met de omgevingsvariabele DOTNET_DiagnosticPorts ingesteld op de waarde in de dotnet-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 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 veel onderliggende processen kan veroorzaken die niet uw app zijn en ze verbinding kunnen maken dotnet-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 gebruiken dotnet exec om de toepassing te starten.