Megosztás:


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

Ez a cikk a ✔️ dotnet-counters 3.0.47001-es és újabb verziókra vonatkozik.

A számlálók a .NET 5 vagy újabb rendszert futtató alkalmazásokból olvashatók.

Telepítés

A letöltésnek és a használatnak dotnet-countershárom módja van:

  • Egylövetű végrehajtás (ajánlott):

    A .NET 10.0.100-tól kezdve állandó telepítés nélkül is futtatható dotnet-counters a következővel dnx:

    dnx dotnet-counters [options]
    

    Például:

    dnx dotnet-counters monitor --process-id 1234
    

    Ez a módszer automatikusan letölti és futtatja a legújabb verziót a rendszer végleges módosítása nélkül.

  • dotnet globális eszköz:

    A dotnet-counters legújabb kiadási verziójának gyakori használatra való telepítéséhez használja a dotnet eszköz telepítési parancsát:

    dotnet tool install --global dotnet-counters
    

    Ez a parancs egy dotnet-counters bináris fájlt telepít a .NET SDK Tools elérési útjára, amelyet hozzáadhat a PATH-hoz a globálisan telepített eszközök egyszerű meghívásához.

  • Közvetlen letöltés:

    Töltse le a platformnak megfelelő végrehajtható eszközt:

    OS Platform
    Windows
    Linux x64 | Arm | Arm64 | musl-x64 | musl-Arm64

Feljegyzés

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

Szinopszis

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

Leírás

dotnet-counters a teljesítménymonitorozási eszköz az alkalmi állapotfigyeléshez é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. Például gyorsan monitorozhat olyan dolgokat, mint a processzorhasználat vagy a .NET Core-alkalmazásba kidobott kivételek száma, így ellenőrizheti, hogy van-e valami gyanús, mielőtt komolyabb teljesítményvizsgálatba PerfViewdotnet-tracekezdenének.

Beállítások

  • --version

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

  • -h|--help

    Parancssori súgót jelenít meg.

Parancsok

Parancs
dotnet-counters collect
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 utófeldolgozás céljából.

Szinopszis

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.

    Feljegyzés

    Linuxon és macOS rendszeren a beállítás használatához a célalkalmazásra van szükség, és dotnet-counters ugyanazt TMPDIR a környezeti változót kell használnia. Ellenkező esetben a parancs időtúllépést fog végrehajtani.

  • -n|--name <name>

    A számlálóadatok gyűjtésére vonatkozó folyamat neve.

    Feljegyzés

    Linuxon és macOS rendszeren a beállítás használatához a célalkalmazásra van szükség, és dotnet-counters ugyanazt TMPDIR a környezeti változót kell használnia. Ellenkező esetben a parancs időtúllépést fog végrehajtani.

  • --diagnostic-port <port-address[,(listen|connect)]>

    Beállítja a figyelendő folyamattal való kommunikációhoz használt diagnosztikai portot . dotnet-counters és a célfolyamaton belüli .NET-futtatókörnyezetnek meg kell egyeznie a portcímmel, az egyik figyeléssel, a másik pedig a csatlakozással. dotnet-countersautomatikusan meghatározza a megfelelő portot a csatoláskor vagy --process-id a --name beállítások használatakor, vagy amikor elindít egy folyamatot a -- <command> beállítás használatával. Általában csak akkor szükséges explicit módon megadni a portot, ha a jövőben elinduló folyamatra vár, vagy egy olyan folyamat felé való kommunikációhoz, amely egy olyan tárolón belül fut, amely nem része az aktuális folyamatnévtérnek.

    Az port-address operációs rendszer különbségei:

    • Linux és macOS – a Unix-tartomány szoftvercsatornáinak elérési útja, például /foo/tool1.socket.
    • Windows – egy elnevezett cső elérési útja, például \\.\pipe\my_diag_port1.
    • Android, iOS és tvOS – ip:port, például 127.0.0.1:9000.

    Alapértelmezés szerint dotnet-counters a megadott címen figyel. Ehelyett a cím után hozzáfűzve dotnet-counters kérheti ,connect a csatlakozást. Például csatlakozik egy .NET-futtatókörnyezeti folyamathoz, --diagnostic-port /foo/tool1.socket,connect amely a Unix-tartomány szoftvercsatornáját /foo/tool1.socket figyeli.

    A számlálók alkalmazásindításból való indításához használt beállítással kapcsolatos további információkért tekintse meg a diagnosztikai port használatát.

  • --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 tekintse meg a beépített metrikákat. Az EventCountersprovider_name esetében az EventSource és a mérőszámokprovider_name neve 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>

    A gyűjteménykonfigurációs paraméterek után a felhasználó hozzáfűzhet -- egy parancsot egy .NET-alkalmazás elindításához. 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ához tartozó metrikák gyűjtéséhez, és a fő belépési pont előtt vagy röviddel korábban előforduló problémák diagnosztizálására vagy figyelésére használható.

    Feljegyzés

    Ezzel a beállítással figyeli az első .NET-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 beállítást önálló alkalmazásokban, vagy használja a dotnet exec <app.dll> lehetőséget.

    Feljegyzés

    Ha elindít egy .NET-végrehajtható fájlt dotnet-counters, a rendszer átirányítja annak bemenetét/kimenetét, és nem fogja tudni kezelni az stdin/stdout értékét. Az eszközről a Ctrl+C vagy a SIGTERM billentyűkombinációval is kiléphet, így biztonságosan befejezheti az eszközt és a gyermekfolyamatot is. Ha a gyermekfolyamat az eszköz előtt kilép, az eszköz is kilép. Ha stdin/stdout parancsot kell használnia, használhatja a --diagnostic-port lehetőséget. További információ: Diagnosztikai port használata.

Feljegyzés

A metrikák gyűjtéséhez dotnet-countersa célfolyamatot futtató felhasználóval azonos felhasználóként vagy gyökérként kell futtatni. 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.
    
  • Kezdjen dotnet mvc.dll gyermekfolyamatként, és kezdje el összegyűjteni a futtatókörnyezet számlálóit és ASP.NET Core Hosting-számlálókat az indításból, é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 monitor

A kijelölt számlálók rendszeres frissítési értékeit jeleníti meg.

Szinopszis

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 számlálók figyelését az alkalmazás indításakor.

  • --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 tekintse meg a beépített metrikákat. Az EventCountersprovider_name esetében az EventSource és a mérőszámokprovider_name neve a mérő neve.

  • -- <command>

    A gyűjteménykonfigurációs paraméterek után hozzáfűzhet -- egy parancsot egy .NET-alkalmazás elindításához. 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ához tartozó metrikák gyűjtéséhez, és a fő belépési pont előtt vagy röviddel korábban előforduló problémák diagnosztizálására vagy figyelésére használható.

    Feljegyzés

    Ezzel a beállítással figyeli az első .NET-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 beállítást önálló alkalmazásokban, vagy használja a dotnet exec <app.dll> lehetőséget.

    Feljegyzés

    Ha elindít egy .NET-végrehajtható fájlt, dotnet-counters átirányítja annak bemenetét/kimenetét, és nem fogja tudni kezelni az stdin/stdout értékét. Az eszközről a Ctrl+C vagy a SIGTERM billentyűkombinációval is kiléphet, így biztonságosan befejezheti az eszközt és a gyermekfolyamatot is. Ha a gyermekfolyamat az eszköz előtt kilép, az eszköz is kilép. Ha stdin/stdout parancsot kell használnia, használhatja a --diagnostic-port lehetőséget. További információ: Diagnosztikai port használata.

Feljegyzé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.

Feljegyzés

A metrikák figyeléséhez dotnet-countersa célfolyamatot futtató felhasználóval azonos felhasználóként vagy gyökérként kell futtatni.

Feljegyzé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 , amely nem egyezik a célfolyamat biteltségével. Győződjön meg arról, hogy letölti az eszköz megfelelő bitképességét a telepítési hivatkozásba.

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
    Name                                              Current Value
    [System.Runtime]
        dotnet.assembly.count ({assembly})                               115
        dotnet.gc.collections ({collection})
            gc.heap.generation
            ------------------
            gen0                                                           5
            gen1                                                           1
            gen2                                                           1
        dotnet.gc.heap.total_allocated (By)                       1.6947e+08
        dotnet.gc.last_collection.heap.fragmentation.size (By)
            gc.heap.generation
            ------------------
            gen0                                                           0
            gen1                                                     348,248
            gen2                                                           0
            loh                                                           32
            poh                                                            0
        dotnet.gc.last_collection.heap.size (By)
            gc.heap.generation
            ------------------
            gen0                                                           0
            gen1                                                  18,010,920
            gen2                                                   5,065,600
            loh                                                       98,384
            poh                                                    3,407,048
        dotnet.gc.last_collection.memory.committed_size (By)      66,842,624
        dotnet.gc.pause.time (s)                                           0.05
        dotnet.jit.compilation.time (s)                                    1.317
        dotnet.jit.compiled_il.size (By)                             574,886
        dotnet.jit.compiled_methods ({method})                         6,008
        dotnet.monitor.lock_contentions ({contention})                   194
        dotnet.process.cpu.count ({cpu})                                  16
        dotnet.process.cpu.time (s)
            cpu.mode
            --------
            system                                                         4.953
            user                                                           6.266
        dotnet.process.memory.working_set (By)                             1.3217e+08
        dotnet.thread_pool.queue.length ({work_item})                      0
        dotnet.thread_pool.thread.count ({thread})                       133
        dotnet.thread_pool.work_item.count ({work_item})              71,188
        dotnet.timer.count ({timer})                                     124
    

    Feljegyzés

    Ha az alkalmazás a .NET 8-os vagy újabb verzióját használja, a System.Runtime Meter nem létezik ezekben a verziókban, és dotnet-counters vissza fog esni a régebbi System.Runtime EventCounters megjelenítéséhez. A felhasználói felület kissé másképp néz ki, ahogy az itt látható.

    [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 szemétgyűjtések és a szemétgyűjtési halom lefoglalásának figyelése a következőből System.Runtime:

    > dotnet-counters monitor --process-id 1902 --counters System.Runtime[dotnet.gc.collections,dotnet.gc.heap.total_allocated]
    
    Press p to pause, r to resume, q to quit.
    Status: Running
    
    Name                                  Current Value
    [System.Runtime]
        dotnet.gc.collections ({collection})
            gc.heap.generation
            ------------------
            gen0                                0
            gen1                                0
            gen2                                0
        dotnet.gc.heap.total_allocated (By)     9,943,384
    
    
  • A felhasználó által definiált EventCounterértékek monitorozásaEventSource. 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
    
  • Indítsa el my-aspnet-server.exe és figyelje az indításkor betöltött szerelvények #-ját:

    > dotnet-counters monitor --counters System.Runtime[dotnet.assembly.count] -- my-aspnet-server.exe
    Press p to pause, r to resume, q to quit.
    Status: Running
    
    Name                               Current Value
    [System.Runtime]
    dotnet.assembly.count ({assembly})      11
    
  • Indítás my-aspnet-server.exe parancssori argumentumokkal arg1 és arg2 annak munkakészletének és GC-halomméretének figyelése az indításkor:

    > dotnet-counters monitor --counters System.Runtime[dotnet.process.memory.working_set,dotnet.gc.last_collection.heap.size] -- my-aspnet-server.exe arg1 arg2
    
    Name                                             Current Value
    [System.Runtime]
        dotnet.gc.last_collection.heap.size (By)
            gc.heap.generation
            ------------------
            gen0                                          560
            gen1                                      462,720
            gen2                                            0
            loh                                             0
            poh                                         8,184
        dotnet.process.memory.working_set (By)     48,431,104
    
    

dotnet-counters ps

Azokat a dotnet-folyamatokat sorolja fel, amelyeket a rendszer figyelhet dotnet-counters. dotnet-counters A 6.0.320703-as és újabb verzió is megjeleníti azokat a parancssori argumentumokat, amelyekkel az egyes folyamatok elindultak, ha elérhetők.

Szinopszis

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

Példa

Tegyük fel, hogy a paranccsal dotnet run --configuration Releaseelindít egy hosszú ideig futó alkalmazást. Egy másik ablakban futtassa a dotnet-counters ps parancsot. A megjelenő kimenet a következő. Ha vannak ilyenek, a parancssori argumentumok a 6.0.320703-as és újabb verzióban 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

A diagnosztikai port egy 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-countershasználhatja dotnet-counters <collect|monitor> -- <command> az előző példákban leírtak szerint, vagy használhatja a --diagnostic-port lehetőséget.

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

Ha azonban pontosabban szeretné szabályozni a figyelt alkalmazás élettartamát (például csak az első 10 percig monitorozza az alkalmazást, és folytatja a végrehajtást), vagy ha a parancssori felület használatával kell kommunikálnia az alkalmazással, a beállítással --diagnostic-port szabályozhatja a figyelt célalkalmazást és dotnet-countersa .

  1. Az alábbi parancs dotnet-counters létrehoz egy diagnosztikai szoftvercsatornát, amely elnevezett myport.sock , és várja meg a kapcsolatot.

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

    Hozam:

    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_DiagnosticPorts beállított környezeti változóvaldotnet-counters.

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

    Ezzel megkezdheti dotnet-counters a számlálók gyűjtését a következő időpontban 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 fel lesz függesztve. Javasoljuk, hogy közvetlenül használja az alkalmazás önálló verzióját, vagy indítsa dotnet exec el az alkalmazást.