Dela via


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:

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-countersden 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-countersmå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ändardefinierade EventSource. 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 med arg1 och arg2 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-countersdu 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.

  1. 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
    
  2. Starta målprogrammet i en separat konsol med miljövariabeln DOTNET_DiagnosticPorts inställd på värdet i dotnet-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 till dotnet-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änder dotnet exec för att starta programmet.