Badanie liczników wydajności (liczniki dotnet-counter)

Ten artykuł dotyczy: ✔️ dotnet-counters wersja 3.0.47001 i nowsze wersje

Instalowanie

Istnieją dwa sposoby pobierania i instalowania dotnet-countersprogramu :

Uwaga

Aby korzystać z dotnet-counters aplikacji x86, potrzebna jest odpowiednia wersja narzędzia x86.

Streszczenie

dotnet-counters [-h|--help] [--version] <command>

Opis

dotnet-counters to narzędzie do monitorowania wydajności na potrzeby monitorowania kondycji ad hoc i badania wydajności pierwszego poziomu. Może obserwować wartości liczników wydajności, które są publikowane za pośrednictwem interfejsu API lub interfejsu EventCounterMeter API. Na przykład możesz szybko monitorować takie elementy jak użycie procesora CPU lub szybkość wyjątków zgłaszanych w aplikacji .NET Core, aby sprawdzić, czy istnieje coś podejrzanego przed rozpoczęciem bardziej poważnego badania wydajności przy użyciu polecenia PerfView lub dotnet-trace.

Opcje

  • --version

    Wyświetla wersję narzędzia dotnet-counters.

  • -h|--help

    Pokazuje pomoc wiersza polecenia.

Polecenia

Polecenie
dotnet-counters collect
dotnet-counters list
dotnet-counters monitor
dotnet-counters ps

dotnet-counters collect

Okresowo zbieraj wybrane wartości liczników i eksportuj je do określonego formatu pliku na potrzeby przetwarzania końcowego.

Streszczenie

dotnet-counters collect [-h|--help] [-p|--process-id] [-n|--name] [--diagnostic-port] [--refresh-interval] [--counters <COUNTERS>] [--format] [-o|--output] [-- <command>]

Opcje

  • -p|--process-id <PID>

    Identyfikator procesu do zbierania danych liczników.

  • -n|--name <name>

    Nazwa procesu do zbierania danych licznika.

  • --diagnostic-port

    Nazwa portu diagnostycznego do utworzenia. Zobacz używanie portu diagnostycznego , aby użyć tej opcji, aby rozpocząć monitorowanie liczników z uruchamiania aplikacji.

  • --refresh-interval <SECONDS>

    Liczba sekund opóźnienia między aktualizowaniem wyświetlanych liczników

  • --counters <COUNTERS>

    Rozdzielona przecinkami lista liczników. Można określić provider_name[:counter_name]liczniki . Jeśli parametr provider_name jest używany bez listy kwalifikowanych liczników, zostaną wyświetlone wszystkie liczniki od dostawcy. Aby odnaleźć nazwy dostawców i liczników, użyj polecenia dotnet-counters list . W przypadku usługi EventCountersprovider_name jest nazwą źródła zdarzeń, a dla miernikówprovider_name jest nazwą miernika.

  • --format <csv|json>

    Format do wyeksportowania. Obecnie dostępne: csv, json.

  • -o|--output <output>

    Nazwa pliku wyjściowego.

  • -- <command> (tylko w przypadku aplikacji docelowych z programem .NET 5 lub nowszym)

    Po parametrach konfiguracji kolekcji użytkownik może dołączyć -- następujące polecenie, aby uruchomić aplikację platformy .NET z co najmniej 5.0 środowiska uruchomieniowego. dotnet-counters uruchomi proces z podanym poleceniem i zbierze żądane metryki. Jest to często przydatne do zbierania metryk dla ścieżki uruchamiania aplikacji i może służyć do diagnozowania lub monitorowania problemów, które występują wcześnie przed lub krótko po głównym punkcie wejścia.

    Uwaga

    Użycie tej opcji monitoruje pierwszy proces platformy .NET 5, który komunikuje się z powrotem do narzędzia, co oznacza, że jeśli polecenie uruchamia wiele aplikacji .NET, będzie zbierać tylko pierwszą aplikację. W związku z tym zaleca się użycie tej opcji w aplikacjach samodzielnych lub przy użyciu dotnet exec <app.dll> opcji .

    Uwaga

    Uruchomienie pliku wykonywalnego platformy .NET za pośrednictwem liczników dotnet spowoduje przekierowanie danych wejściowych/wyjściowych i nie będzie można wchodzić w interakcję z elementem stdin/stdout. Zamknięcie narzędzia za pomocą klawiszy CTRL+C lub SIGTERM umożliwi bezpieczne zakończenie zarówno narzędzia, jak i procesu podrzędnego. Jeśli proces podrzędny zakończy się przed narzędziem, narzędzie zakończy się również i ślad powinien być bezpiecznie wyświetlany. Jeśli musisz użyć polecenia stdin/stdout, możesz użyć --diagnostic-port opcji . Aby uzyskać więcej informacji, zobacz Używanie portu diagnostycznego .

Uwaga

W systemach Linux i macOS to polecenie oczekuje aplikacji docelowej i dotnet-counters będzie współużytkować tę samą TMPDIR zmienną środowiskową. W przeciwnym razie upłynął limit czasu polecenia.

Uwaga

Aby zebrać metryki przy użyciu programu dotnet-counters, należy uruchomić go jako ten sam użytkownik, co użytkownik uruchamiając proces docelowy lub jako główny. W przeciwnym razie narzędzie nie może nawiązać połączenia z procesem docelowym.

Przykłady

  • Zbierz wszystkie liczniki w interwale odświeżania wynoszącym 3 sekundy i wygeneruj plik CSV jako dane wyjściowe:

    > 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.
    
  • Rozpocznij dotnet mvc.dll jako proces podrzędny i rozpocznij zbieranie liczników środowiska uruchomieniowego i ASP.NET Core liczniki hostingu z uruchamiania i zapisz je jako dane wyjściowe JSON:

    > 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

Wyświetla listę nazw liczników i opisów pogrupowanych według dostawcy.

Streszczenie

dotnet-counters list [-h|--help]

Przykład

> 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

Uwaga

Liczniki Microsoft.AspNetCore.Hosting są wyświetlane, gdy istnieją procesy, które obsługują te liczniki, na przykład gdy aplikacja ASP.NET Core jest uruchomiona na maszynie hosta.

dotnet-counters monitor

Wyświetla okresowo odświeżanie wartości wybranych liczników.

Streszczenie

dotnet-counters monitor [-h|--help] [-p|--process-id] [-n|--name] [--diagnostic-port] [--refresh-interval] [--counters] [-- <command>]

Opcje

  • -p|--process-id <PID>

    Identyfikator procesu do monitorowania.

  • -n|--name <name>

    Nazwa procesu do monitorowania.

  • --diagnostic-port

    Nazwa portu diagnostycznego do utworzenia. Zobacz używanie portu diagnostycznego , aby użyć tej opcji, aby rozpocząć monitorowanie liczników z uruchamiania aplikacji.

  • --refresh-interval <SECONDS>

    Liczba sekund opóźnienia między aktualizowaniem wyświetlanych liczników

  • --counters <COUNTERS>

    Rozdzielona przecinkami lista liczników. Można określić provider_name[:counter_name]liczniki . Jeśli parametr provider_name jest używany bez listy kwalifikowanych liczników, zostaną wyświetlone wszystkie liczniki od dostawcy. Aby odnaleźć nazwy dostawców i liczników, użyj polecenia dotnet-counters list . W przypadku usługi EventCountersprovider_name jest nazwą źródła zdarzeń, a dla miernikówprovider_name jest nazwą miernika.

-- <command> (tylko w przypadku aplikacji docelowych z programem .NET 5 lub nowszym)

Po parametrach konfiguracji kolekcji użytkownik może dołączyć -- następujące polecenie, aby uruchomić aplikację platformy .NET z co najmniej 5.0 środowiska uruchomieniowego. dotnet-counters uruchomi proces z podanym poleceniem i będzie monitorować żądane metryki. Jest to często przydatne do zbierania metryk dla ścieżki uruchamiania aplikacji i może służyć do diagnozowania lub monitorowania problemów, które występują wcześnie przed lub krótko po głównym punkcie wejścia.

Uwaga

Użycie tej opcji monitoruje pierwszy proces platformy .NET 5, który komunikuje się z powrotem do narzędzia, co oznacza, że jeśli polecenie uruchamia wiele aplikacji .NET, będzie zbierać tylko pierwszą aplikację. W związku z tym zaleca się użycie tej opcji w aplikacjach samodzielnych lub przy użyciu dotnet exec <app.dll> opcji .

Uwaga

Uruchomienie pliku wykonywalnego platformy .NET za pośrednictwem liczników dotnet spowoduje przekierowanie danych wejściowych/wyjściowych i nie będzie można wchodzić w interakcję z elementem stdin/stdout. Zamknięcie narzędzia za pomocą klawiszy CTRL+C lub SIGTERM bezpiecznie zakończy zarówno narzędzie, jak i proces podrzędny. Jeśli proces podrzędny zakończy działanie przed narzędziem, narzędzie również zakończy działanie. Jeśli musisz użyć stdin/stdout, możesz użyć --diagnostic-port opcji . Aby uzyskać więcej informacji, zobacz Korzystanie z portu diagnostycznego .

Uwaga

W systemach Linux i macOS to polecenie oczekuje aplikacji docelowej i dotnet-counters będzie współużytkować tę samą TMPDIR zmienną środowiskową.

Uwaga

Aby monitorować metryki przy użyciu polecenia dotnet-counters, należy uruchomić go jako ten sam użytkownik, co użytkownik uruchamia proces docelowy lub jako główny.

Uwaga

Jeśli zostanie wyświetlony komunikat o błędzie podobny do następującego: [ERROR] System.ComponentModel.Win32Exception (299): A 32 bit processes cannot access modules of a 64 bit process., próbujesz użyć dotnet-counters , który ma niezgodność bitów względem procesu docelowego. Upewnij się, że pobrano poprawną bitność narzędzia w linku instalacji .

Przykłady

  • Monitoruj wszystkie liczniki z System.Runtime przedziału czasu odświeżania wynoszącym 3 sekundy:

    > 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
    
  • Monitoruj tylko użycie procesora CPU i rozmiar sterty GC z 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
    
  • Monitoruj EventCounter wartości zdefiniowane przez EventSourceużytkownika. Aby uzyskać więcej informacji, zobacz Samouczek: mierzenie wydajności przy użyciu funkcji EventCounters na platformie .NET Core.

    > dotnet-counters monitor --process-id 1902 --counters Samples-EventCounterDemos-Minimal
    
    Press p to pause, r to resume, q to quit.
        request                                      100
    
  • Wyświetl wszystkie dobrze znane liczniki dostępne w programie 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
    
  • Wyświetl wszystkie dobrze znane liczniki dostępne w dotnet-counters aplikacjach platformy .NET 5:

    > 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
    
  • Uruchom my-aspnet-server.exe i monitoruj liczbę zestawów załadowanych podczas uruchamiania (tylko platforma.NET 5 lub nowsza):

    Ważne

    Działa to tylko w przypadku aplikacji z programem .NET 5 lub nowszym.

    > 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
    
  • Uruchom polecenie my-aspnet-server.exe przy arg1 użyciu argumentów wiersza polecenia i arg2 jako i monitoruj jego zestaw roboczy oraz rozmiar sterty GC od jego uruchomienia (tylko platforma.NET 5 lub nowsza):

    Ważne

    Działa to tylko w przypadku aplikacji z programem .NET 5 lub nowszym.

    > 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

Wyświetla listę procesów dotnet, które mogą być monitorowane przez dotnet-countersprogram . dotnet-counters W wersji 6.0.320703 lub nowszej wyświetlane są również argumenty wiersza polecenia, z którymi uruchomiono każdy proces, jeśli jest dostępny.

Streszczenie

dotnet-counters ps [-h|--help]

Przykład

Załóżmy, że uruchamiasz długotrwałą aplikację przy użyciu polecenia dotnet run --configuration Release. W innym oknie uruchomisz dotnet-counters ps polecenie . Dane wyjściowe, które zobaczysz, są następujące. Argumenty wiersza polecenia, jeśli istnieją, są wyświetlane w dotnet-counters wersji 6.0.320703 lub nowszej.

> dotnet-counters ps
  
  21932 dotnet     C:\Program Files\dotnet\dotnet.exe   run --configuration Release
  36656 dotnet     C:\Program Files\dotnet\dotnet.exe

Korzystanie z portu diagnostycznego

Ważne

Działa to tylko w przypadku aplikacji z programem .NET 5 lub nowszym.

Port diagnostyczny to funkcja środowiska uruchomieniowego dodana na platformie .NET 5, która umożliwia rozpoczęcie monitorowania lub zbierania liczników podczas uruchamiania aplikacji. W tym dotnet-counterscelu można użyć metody , zgodnie z dotnet-counters <collect|monitor> -- <command> opisem w powyższych przykładach lub użyć --diagnostic-port opcji .

Użycie dotnet-counters <collect|monitor> -- <command> polecenia w celu uruchomienia aplikacji jako procesu podrzędnego jest najprostszym sposobem szybkiego monitorowania jej z poziomu uruchamiania.

Jeśli jednak chcesz uzyskać dokładnszą kontrolę nad okresem istnienia monitorowanej aplikacji (na przykład monitorować aplikację tylko przez pierwsze 10 minut i kontynuować wykonywanie) lub jeśli musisz wchodzić w interakcję z aplikacją przy użyciu interfejsu wiersza polecenia, przy użyciu --diagnostic-port opcji możesz kontrolować zarówno monitorowaną aplikację docelową, jak i dotnet-counters.

  1. Poniższe polecenie sprawia, że liczniki dotnet-counter tworzą gniazdo diagnostyczne o nazwie myport.sock i oczekują na połączenie.

    dotnet-counters collect --diagnostic-port myport.sock
    

    Dane wyjściowe:

    Waiting for connection on myport.sock
    Start an application with the following environment variable: DOTNET_DiagnosticPorts=/home/user/myport.sock
    
  2. W oddzielnej konsoli uruchom aplikację docelową ze zmienną środowiskową DOTNET_DiagnosticPorts ustawioną na wartość w danych wyjściowych dotnet-counters .

    export DOTNET_DiagnosticPorts=/home/user/myport.sock
    ./my-dotnet-app arg1 arg2
    

    Powinno to następnie umożliwić dotnet-counters rozpoczęcie zbierania liczników w usłudze 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.
    

    Ważne

    Uruchomienie aplikacji za dotnet run pomocą polecenia może być problematyczne, ponieważ interfejs wiersza polecenia dotnet może spowodować zduplikowanie wielu procesów podrzędnych, które nie są Twoją aplikacją, i mogą łączyć się z dotnet-counters aplikacją przed aplikacją, pozostawiając aplikację do zawieszenia w czasie wykonywania. Zaleca się bezpośrednie użycie samodzielnej wersji aplikacji lub użycie dotnet exec jej do uruchomienia aplikacji.