Teljesítményszámlálók (dotnet-counters) vizsgálata

Ez a cikk a következő verziókra vonatkozik: ✔️ dotnet-counters 3.0.47001-es és újabb verziók

Telepítés

A letöltésnek és a telepítésnek dotnet-counterskét módja van:

Megjegyzés

dotnet-counters Az x86-alkalmazásokhoz az eszköz megfelelő x86-os verziójára van szükség.

Áttekintés

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

Description

dotnet-counters egy teljesítménymonitorozási eszköz az alkalmi állapotmonitorozáshoz és az első szintű teljesítményvizsgálathoz. Megfigyelheti az API-val vagy az EventCounterMeter API-val közzétett teljesítményszámláló-értékeket. Gyorsan monitorozhat például olyan dolgokat, mint a processzorhasználat vagy a .NET Core-alkalmazásban megjelenő kivételek aránya, hogy kiderüljön, van-e valami gyanús, mielőtt komolyabb teljesítményvizsgálatba kezd a vagy dotnet-tracea használatávalPerfView.

Beállítások

  • --version

    Megjeleníti a dotnet-counters segédprogram verzióját.

  • -h|--help

    A parancssori súgót jeleníti meg.

Parancsok

Parancs
dotnet-counters collect
dotnet-counters lista
dotnet-counters monitor
dotnet-counters ps

dotnet-counters collect

Rendszeres időközönként gyűjtse össze a kiválasztott számlálóértékeket, és exportálja őket egy megadott fájlformátumba a feldolgozás után.

Áttekintés

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

Beállítások

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

    A számlálóadatok gyűjtésére vonatkozó folyamat azonosítója.

  • -n|--name <name>

    Annak a folyamatnak a neve, amelyből számlálóadatokat gyűjt.

  • --diagnostic-port

    A létrehozandó diagnosztikai port neve. A diagnosztikai port használatával megtudhatja, hogyan indíthatja el a figyelési számlálókat az alkalmazás indításával.

  • --refresh-interval <SECONDS>

    A megjelenített számlálók frissítése közötti késleltetési másodpercek száma

  • --counters <COUNTERS>

    Számlálók vesszővel tagolt listája. A számlálók megadhatók provider_name[:counter_name]. Ha a provider_name számlálók megfelelő listája nélkül használja, akkor a szolgáltató összes számlálója megjelenik. A szolgáltató- és számlálónevek felderítéséhez használja a dotnet-counters list parancsot. Az EventCounters esetében az EventSource neve, provider_name a Mérőkprovider_name esetében pedig a Mérő neve.

  • --format <csv|json>

    Az exportálandó formátum. Jelenleg elérhető: csv, json.

  • -o|--output <output>

    A kimeneti fájl neve.

  • -- <command> (csak .NET 5-ös vagy újabb verziót futtató célalkalmazásokhoz)

    A gyűjteménykonfigurációs paraméterek után a felhasználó hozzáfűzhet -- egy parancsot, amellyel elindíthat egy .NET-alkalmazást legalább 5.0-s futtatókörnyezettel. dotnet-counters elindít egy folyamatot a megadott paranccsal, és összegyűjti a kért metrikákat. Ez gyakran hasznos az alkalmazás indítási útvonalára vonatkozó metrikák gyűjtéséhez, és a fő belépési pont előtt vagy röviddel később felmerülő problémák diagnosztizálására vagy monitorozására használható.

    Megjegyzés

    Ezzel a beállítással figyeli az első .NET 5 folyamatot, amely visszakomlik az eszközhöz, ami azt jelenti, hogy ha a parancs több .NET-alkalmazást indít el, az csak az első alkalmazást fogja összegyűjteni. Ezért javasoljuk, hogy használja ezt a lehetőséget önálló alkalmazásokban, vagy használja a dotnet exec <app.dll> lehetőséget.

    Megjegyzés

    A dotnet-counterson keresztül végrehajtható .NET-fájl elindításakor a bemenet/kimenet átirányításra kerül, és nem fog tudni kommunikálni az stdin/stdoutjával. Ha a CTRL+C vagy AIGTERM billentyűkombinációval kilép az eszközből, az biztonságosan lezárja az eszközt és a gyermekfolyamatot is. Ha a gyermekfolyamat az eszköz előtt kilép, az eszköz is kilép, és a nyomkövetésnek biztonságosan megtekinthetőnek kell lennie. Ha stdin/stdout parancsot kell használnia, használhatja a --diagnostic-port lehetőséget. További információt a Diagnosztikai port használata című témakörben talál.

Megjegyzés

Linux és macOS rendszeren ez a parancs elvárja a célalkalmazást, és dotnet-counters ugyanazt TMPDIR a környezeti változót használja. Ellenkező esetben a parancs időtúllépést jelez.

Megjegyzés

A metrikák a használatával dotnet-counterstörténő gyűjtéséhez ugyanazt a felhasználót kell futtatni, mint a célfolyamatot futtató felhasználót, vagy gyökérként. Ellenkező esetben az eszköz nem fog kapcsolatot létesíteni a célfolyamattal.

Példák

  • Gyűjtse össze az összes számlálót 3 másodperces frissítési időközzel, és hozzon létre egy csv-t kimenetként:

    > 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.
    
  • Kezdje el dotnet mvc.dll gyermekfolyamatként, és kezdje el összegyűjteni a futtatókörnyezet-számlálókat és ASP.NET Core üzemeltetési számlálókat az indításkor, és mentse JSON-kimenetként:

    > 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

A számlálónevek és leírások listáját jeleníti meg szolgáltató szerint csoportosítva.

Áttekintés

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

Példa

> 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

Megjegyzés

A Microsoft.AspNetCore.Hosting számlálók akkor jelennek meg, ha vannak olyan folyamatok, amelyek támogatják ezeket a számlálókat, például amikor egy ASP.NET Core alkalmazás fut a gazdagépen.

dotnet-counters monitor

A kijelölt számlálók időszakosan frissülő értékeit jeleníti meg.

Áttekintés

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

Beállítások

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

    A monitorozni kívánt folyamat azonosítója.

  • -n|--name <name>

    A monitorozni kívánt folyamat neve.

  • --diagnostic-port

    A létrehozandó diagnosztikai port neve. A diagnosztikai port használatával megtudhatja, hogyan indíthatja el a figyelési számlálókat az alkalmazás indításával.

  • --refresh-interval <SECONDS>

    A megjelenített számlálók frissítése közötti késleltetési másodpercek száma

  • --counters <COUNTERS>

    Számlálók vesszővel tagolt listája. A számlálók megadhatók provider_name[:counter_name]. Ha a provider_name számlálók megfelelő listája nélkül használja, akkor a szolgáltató összes számlálója megjelenik. A szolgáltató- és számlálónevek felderítéséhez használja a dotnet-counters list parancsot. Az EventCounters esetében az EventSource neve, provider_name a Mérőkprovider_name esetében pedig a Mérő neve.

-- <command> (csak .NET 5-ös vagy újabb verziót futtató célalkalmazásokhoz)

A gyűjteménykonfigurációs paraméterek után a felhasználó hozzáfűzhet -- egy parancsot, amellyel elindíthat egy .NET-alkalmazást legalább 5.0-s futtatókörnyezettel. dotnet-counters elindít egy folyamatot a megadott paranccsal, és figyeli a kért metrikákat. Ez gyakran hasznos az alkalmazás indítási útvonalára vonatkozó metrikák gyűjtéséhez, és a fő belépési pont előtt vagy röviddel később felmerülő problémák diagnosztizálására vagy monitorozására használható.

Megjegyzés

Ezzel a beállítással figyeli az első .NET 5 folyamatot, amely visszakomlik az eszközhöz, ami azt jelenti, hogy ha a parancs több .NET-alkalmazást indít el, az csak az első alkalmazást fogja összegyűjteni. Ezért javasoljuk, hogy használja ezt a lehetőséget önálló alkalmazásokban, vagy használja a dotnet exec <app.dll> lehetőséget.

Megjegyzés

A dotnet-counterson keresztül végrehajtható .NET-fájl elindításakor a bemenet/kimenet átirányításra kerül, és nem fog tudni kommunikálni az stdin/stdoutjával. Ha a CTRL+C vagy a SIGTERM billentyűkombinációval kilép az eszközből, az biztonságosan lezárja az eszközt és a gyermekfolyamatot is. Ha a gyermekfolyamat az eszköz előtt kilép, az eszköz is kilép. Ha az stdin/stdout parancsot kell használnia, használhatja a --diagnostic-port lehetőséget. További információ: Diagnosztikai port használata .

Megjegyzés

Linux és macOS rendszeren ez a parancs elvárja a célalkalmazást, és dotnet-counters ugyanazt TMPDIR a környezeti változót használja.

Megjegyzés

Ahhoz, hogy a használatával dotnet-countersmonitorozza a metrikákat, ugyanazt a felhasználót kell futtatnia, mint a célfolyamatot futtató felhasználót, vagy gyökérként.

Megjegyzés

Ha a következőhöz hasonló hibaüzenet jelenik meg: [ERROR] System.ComponentModel.Win32Exception (299): A 32 bit processes cannot access modules of a 64 bit process., olyant próbál használni dotnet-counters , amelynek bitje nem egyezik a célfolyamattal. Győződjön meg arról, hogy a telepítési hivatkozásra kattintva letölti az eszköz megfelelő biterejét.

Példák

  • Az összes számláló System.Runtime figyelése 3 másodperces frissítési időközzel:

    > 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
    
  • Csak a cpu-használat és a GC halomméretének monitorozása innen 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
    
  • A felhasználó által definiált EventSourceértékek monitorozásaEventCounter. További információ : Oktatóanyag: Teljesítmény mérése EventCounters használatával a .NET Core-ban.

    > dotnet-counters monitor --process-id 1902 --counters Samples-EventCounterDemos-Minimal
    
    Press p to pause, r to resume, q to quit.
        request                                      100
    
  • Tekintse meg az összes jól ismert számlálót, amely a következő helyen dotnet-countersérhető el:

    > 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
    
  • A .NET 5-alkalmazásokban dotnet-counters elérhető összes jól ismert számláló megtekintése:

    > 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
    
  • Indítsa el my-aspnet-server.exe és figyelje az indításból betöltött szerelvények #-ját (csak.NET 5 vagy újabb):

    Fontos

    Ez csak a .NET 5-ös vagy újabb verziót futtató alkalmazások esetében működik.

    > 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
    
  • arg1 Indítsa el my-aspnet-server.exe a és arg2 a parancsot parancssori argumentumként, és figyelje a munkakészletét és a GC halomméretét az indításkor (csak.NET 5 vagy újabb verziók esetén):

    Fontos

    Ez csak a .NET 5-ös vagy újabb verziót futtató alkalmazások esetében működik.

    > 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

A által monitorozni kívánt dotnet-folyamatokat sorolja dotnet-countersfel. dotnet-counters 6.0.320703-as és újabb verziókban is megjelennek az egyes folyamatok által elindított parancssori argumentumok, ha elérhetők.

Áttekintés

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

Példa

Tegyük fel, hogy egy hosszú ideig futó alkalmazást a paranccsal dotnet run --configuration Releaseindít el. Egy másik ablakban futtassa a dotnet-counters ps parancsot. A megjelenő kimenet a következő. A parancssori argumentumok (ha vannak ilyenek) a 6.0.320703-as és újabb verziókban dotnet-counters jelennek meg.

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

Diagnosztikai port használata

Fontos

Ez csak a .NET 5-ös vagy újabb verziót futtató alkalmazások esetében működik.

A diagnosztikai port a .NET 5-ben hozzáadott futtatókörnyezeti funkció, amellyel megkezdheti a számlálók figyelését vagy gyűjtését az alkalmazás indításakor. Ehhez dotnet-countersdotnet-counters <collect|monitor> -- <command> használhatja a fenti példákban leírtak szerint, vagy használhatja a --diagnostic-port lehetőséget.

Az alkalmazás gyermekfolyamatként való elindításának a legegyszerűbb dotnet-counters <collect|monitor> -- <command> módja annak, hogy a rendszerindítástól kezdve gyorsan monitorozza.

Ha azonban részletesebben szeretné szabályozni a figyelt alkalmazás élettartamát (például csak az első 10 percre szeretné figyelni az alkalmazást, és folytatni szeretné a végrehajtást), vagy ha a parancssori felülettel kell interakcióba lépnie az alkalmazással, a beállítással --diagnostic-port szabályozhatja a figyelt célalkalmazást és dotnet-countersa -t is.

  1. Az alábbi paranccsal a dotnet-counters létrehoz egy nevű myport.sock diagnosztikai szoftvercsatornát, és megvárja a kapcsolatot.

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

    Kimenet:

    Waiting for connection on myport.sock
    Start an application with the following environment variable: DOTNET_DiagnosticPorts=/home/user/myport.sock
    
  2. Egy külön konzolon indítsa el a célalkalmazást a kimeneti értékre dotnet-counters beállított környezeti változóvalDOTNET_DiagnosticPorts.

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

    Ennek ezután engedélyeznie dotnet-counters kell a számlálók gyűjtését a következőn 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.
    

    Fontos

    Az alkalmazás dotnet run indítása problémás lehet, mert a dotnet parancssori felület számos olyan gyermekfolyamatot hozhat létre, amelyek nem az Ön alkalmazása, és az alkalmazás előtt csatlakozhatnak dotnet-counters hozzájuk, így az alkalmazás futásidőben felfüggeszthető. Javasoljuk, hogy közvetlenül használja az alkalmazás önálló verzióját, vagy indítsa dotnet exec el az alkalmazást.