Menyelidiki penghitung kinerja (penghitung dotnet)

Artikel ini berlaku untuk: ✔️ dotnet-counters versi 3.0.47001 dan versi yang lebih baru

Instal

ada dua cara untuk mengunduh dan menginstal dotnet-counters:

Catatan

Untuk menggunakan dotnet-counters pada aplikasi x86, Anda memerlukan alat versi x86 yang sesuai.

Sinopsis

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

Deskripsi

dotnet-counters adalah alat pemantauan performa untuk pemantauan kesehatan ad-hoc dan penyelidikan performa tingkat pertama. Ini dapat mengamati nilai penghitung kinerja yang diterbitkan melalui EventCounter API atau Meter API. Misalnya, Anda dapat dengan cepat memantau hal-hal seperti penggunaan CPU atau tingkat pengecualian yang dilemparkan di aplikasi .NET Core Anda untuk melihat apakah ada sesuatu yang mencurigakan sebelum menyelami penyelidikan performa yang lebih serius menggunakan PerfView atau dotnet-trace.

Opsi

  • --version

    Menampilkan versi utilitas dotnet-counters.

  • -h|--help

    Tampilkan bantuan baris perintah.

Perintah

Perintah
dotnet-counters collect
dotnet-counters list
dotnet-counters monitor
dotnet-counters ps

dotnet-counters collect

Kumpulkan nilai penghitung yang dipilih secara berkala dan ekspor ke dalam format file tertentu untuk pasca-pemrosesan.

Sinopsis

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

Opsi

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

    ID proses untuk mengumpulkan data penghitung.

  • -n|--name <name>

    Nama proses untuk mengumpulkan data penghitung.

  • --diagnostic-port

    Nama port diagnostik yang akan dibuat. Lihat menggunakan port diagnostik untuk cara menggunakan opsi ini untuk mulai memantau penghitung dari pengaktifan aplikasi.

  • --refresh-interval <SECONDS>

    Jumlah detik untuk ditunda antara memperbarui penghitung yang ditampilkan

  • --counters <COUNTERS>

    Daftar penghitung yang dipisahkan koma. Penghitung dapat ditentukan provider_name[:counter_name]. Jika provider_name digunakan tanpa daftar penghitung yang memenuhi syarat, maka semua penghitung dari penyedia ditampilkan. Untuk menemukan nama penyedia dan penghitung, gunakan perintah daftar penghitung dotnet. Untuk EventCounters, provider_name adalah nama EventSource dan untuk Meter,provider_name adalah nama Meter.

  • --format <csv|json>

    Format yang akan diekspor. Saat ini tersedia: csv, json.

  • -o|--output <output>

    Nama file output.

  • -- <command> (hanya untuk aplikasi target yang menjalankan .NET 5 atau yang lebih baru)

    Setelah parameter konfigurasi pengumpulan, pengguna dapat menambahkan -- diikuti dengan perintah untuk memulai aplikasi .NET dengan setidaknya runtime 5.0. dotnet-counters akan meluncurkan proses dengan perintah yang disediakan dan mengumpulkan metrik yang diminta. Ini sering berguna untuk mengumpulkan metrik untuk jalur startup aplikasi dan dapat digunakan untuk mendiagnosis atau memantau masalah yang terjadi lebih awal sebelum atau tidak lama setelah titik masuk utama.

    Catatan

    Menggunakan opsi ini memantau proses .NET 5 pertama yang berkomunikasi kembali ke alat, yang berarti jika perintah Anda meluncurkan beberapa aplikasi .NET, perintah hanya akan mengumpulkan aplikasi pertama. Oleh karena itu, disarankan agar Anda menggunakan opsi ini pada aplikasi mandiri, atau menggunakan opsi dotnet exec <app.dll>.

    Catatan

    Meluncurkan executable .NET melalui penghitung dotnet akan membuat input/outputnya dialihkan dan Anda tidak akan dapat berinteraksi dengan stdin/stdout-nya. Keluar dari alat melalui CTRL+C atau SIGTERM akan dengan aman mengakhiri alat dan proses anak. Jika proses anak keluar sebelum alat, alat akan keluar juga dan jejak harus dapat dilihat dengan aman. Jika Anda perlu menggunakan stdin/stdout, Anda dapat menggunakan opsi --diagnostic-port. Lihat Menggunakan port diagnostik untuk informasi selengkapnya.

Catatan

Di Linux dan macOS, perintah ini mengharapkan aplikasi target dan dotnet-counters untuk membagikan variabel lingkungan TMPDIR yang sama. Jika tidak, perintah akan kehabisan waktu.

Catatan

Untuk mengumpulkan metrik menggunakan dotnet-counters, metrik perlu dijalankan sebagai pengguna yang sama dengan pengguna yang menjalankan proses target atau sebagai root. Jika tidak, alat akan gagal membuat koneksi dengan proses target.

Contoh

  • Kumpulkan semua penghitung pada interval refresh 3 detik dan hasilkan csv sebagai output:

    > 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.
    
  • Mulai dotnet mvc.dll sebagai proses turunan dan mulai kumpulkan penghitung runtime bahasa umum dan ASP.NET penghitung Core Hosting dari startup dan simpan sebagai output 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

Menampilkan daftar nama dan deskripsi penghitung, yang dikelompokkan menurut penyedia.

Sinopsis

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

Contoh

> 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

Catatan

Penghitung Microsoft.AspNetCore.Hosting ditampilkan ketika ada proses yang diidentifikasi yang mendukung penghitung ini, misalnya; ketika aplikasi ASP.NET Core berjalan pada komputer host.

dotnet-counters monitor

Menampilkan nilai yang direfresh secara berkala penghitung terpilih.

Sinopsis

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

Opsi

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

    ID proses yang akan dipantau.

  • -n|--name <name>

    Nama proses yang akan dipantau.

  • --diagnostic-port

    Nama port diagnostik yang akan dibuat. Lihat menggunakan port diagnostik untuk cara menggunakan opsi ini untuk mulai memantau penghitung dari pengaktifan aplikasi.

  • --refresh-interval <SECONDS>

    Jumlah detik untuk ditunda antara memperbarui penghitung yang ditampilkan

  • --counters <COUNTERS>

    Daftar penghitung yang dipisahkan koma. Penghitung dapat ditentukan provider_name[:counter_name]. Jika provider_name digunakan tanpa daftar penghitung yang memenuhi syarat, maka semua penghitung dari penyedia ditampilkan. Untuk menemukan nama penyedia dan penghitung, gunakan perintah daftar penghitung dotnet. Untuk EventCounters, provider_name adalah nama EventSource dan untuk Meter,provider_name adalah nama Meter.

-- <command> (hanya untuk aplikasi target yang menjalankan .NET 5 atau yang lebih baru)

Setelah parameter konfigurasi pengumpulan, pengguna dapat menambahkan -- diikuti dengan perintah untuk memulai aplikasi .NET dengan setidaknya runtime 5.0. dotnet-counters akan meluncurkan proses dengan perintah yang disediakan dan memantau metrik yang diminta. Ini sering berguna untuk mengumpulkan metrik untuk jalur startup aplikasi dan dapat digunakan untuk mendiagnosis atau memantau masalah yang terjadi lebih awal sebelum atau tidak lama setelah titik masuk utama.

Catatan

Menggunakan opsi ini memantau proses .NET 5 pertama yang berkomunikasi kembali ke alat, yang berarti jika perintah Anda meluncurkan beberapa aplikasi .NET, perintah hanya akan mengumpulkan aplikasi pertama. Oleh karena itu, disarankan agar Anda menggunakan opsi ini pada aplikasi mandiri, atau menggunakan opsi dotnet exec <app.dll>.

Catatan

Meluncurkan executable .NET melalui penghitung dotnet akan membuat input/outputnya dialihkan dan Anda tidak akan dapat berinteraksi dengan stdin/stdout-nya. Keluar dari alat melalui CTRL+C atau SIGTERM akan dengan aman mengakhiri alat dan proses anak. Jika proses turunan keluar sebelum alat, alat juga akan keluar. Jika Anda perlu menggunakan stdin/stdout, Anda dapat menggunakan opsi --diagnostic-port. Lihat Menggunakan port diagnostik untuk informasi selengkapnya.

Catatan

Di Linux dan macOS, perintah ini mengharapkan aplikasi target dan dotnet-counters untuk membagikan variabel lingkungan TMPDIR yang sama.

Catatan

Untuk memantau metrik menggunakan dotnet-counters, metrik perlu dijalankan sebagai pengguna yang sama dengan pengguna yang menjalankan proses target atau sebagai root.

Catatan

Jika Anda melihat pesan kesalahan yang mirip dengan pesan berikut: [ERROR] System.ComponentModel.Win32Exception (299): A 32 bit processes cannot access modules of a 64 bit process., Anda mencoba menggunakan dotnet-counters bitness yang tidak cocok terhadap proses target. Pastikan untuk mengunduh bitness alat yang benar di link instal.

Contoh

  • Pantau semua penghitung dari System.Runtime pada interval refresh 3 detik:

    > 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
    
  • Pantau hanya penggunaan CPU dan ukuran heap GC dari 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
    
  • Pantau nilai EventCounter dari EventSource yang ditentukan pengguna. Untuk informasi selengkapnya, lihat Tutorial: Mengukur performa menggunakan EventCounters di .NET Core.

    > dotnet-counters monitor --process-id 1902 --counters Samples-EventCounterDemos-Minimal
    
    Press p to pause, r to resume, q to quit.
        request                                      100
    
  • Lihat semua penghitung terkemuka yang tersedia di 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
    
  • Lihat semua penghitung terkemuka yang tersedia di dotnet-counters untuk aplikasi .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
    
  • Luncurkan my-aspnet-server.exe dan pantau # rakitan yang dimuat dari startup-nya (hanya.NET 5 atau yang lebih baru):

    Penting

    Ini hanya berfungsi untuk aplikasi yang menjalankan .NET 5 atau yang lebih baru.

    > 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
    
  • Luncurkan my-aspnet-server.exe dengan arg1 dan arg2 sebagai argumen baris perintah dan pantau set kerjanya dan ukuran heap GC dari startupnya (hanya.NET 5 atau yang lebih baru):

    Penting

    Ini hanya berfungsi untuk aplikasi yang menjalankan .NET 5 atau yang lebih baru.

    > 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

Mencantumkan proses dotnet yang dapat dipantau oleh dotnet-counters. dotnet-counters versi 6.0.320703 dan yang lebih baru, juga menampilkan argumen baris perintah yang dimulai setiap proses, jika tersedia.

Sinopsis

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

Contoh

Misalkan Anda memulai aplikasi yang berjalan lama menggunakan perintah dotnet run --configuration Release. Di jendela lain, Anda menjalankan perintah dotnet-counters ps. Output yang akan Anda lihat adalah sebagai berikut. Argumen baris perintah, jika ada, ditampilkan di versi 6.0.320703 dotnet-counters dan yang lebih baru.

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

Port diagnostik

Penting

Ini hanya berfungsi untuk aplikasi yang menjalankan .NET 5 atau yang lebih baru.

Port diagnostik adalah fitur runtime bahasa umum yang ditambahkan di .NET 5 yang memungkinkan Anda untuk mulai memantau atau mengumpulkan penghitung dari startup aplikasi. Untuk melakukan ini menggunakan dotnet-counters, Anda dapat menggunakan dotnet-counters <collect|monitor> -- <command> seperti yang dijelaskan dalam contoh di atas, atau menggunakan opsi --diagnostic-port.

Menggunakan dotnet-counters <collect|monitor> -- <command> untuk meluncurkan aplikasi sebagai proses anak adalah cara paling sederhana untuk memantaunya dengan cepat dari startupnya.

Namun, ketika Anda ingin mendapatkan kontrol yang lebih baik selama masa pakai aplikasi yang dipantau (misalnya, pantau aplikasi selama 10 menit pertama saja dan lanjutkan eksekusi) atau jika Anda perlu berinteraksi dengan aplikasi menggunakan CLI, menggunakan opsi --diagnostic-port memungkinkan Anda mengontrol aplikasi target yang dipantau dan dotnet-counters.

  1. Perintah di bawah ini membuat penghitung dotnet membuat soket diagnostik bernama myport.sock dan menunggu koneksi.

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

    Output:

    Waiting for connection on myport.sock
    Start an application with the following environment variable: DOTNET_DiagnosticPorts=/home/user/myport.sock
    
  2. Di konsol terpisah, luncurkan aplikasi target dengan variabel lingkungan DOTNET_DiagnosticPorts yang diatur ke nilai dalam output dotnet-counters.

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

    Ini kemudian harus memungkinkan dotnet-counters untuk mulai mengumpulkan penghitung pada 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.
    

    Penting

    Meluncurkan aplikasi dotnet run Anda dapat bermasalah karena CLI dotnet mungkin menghasilkan banyak proses turunan yang bukan aplikasi Anda dan dapat terhubung ke dotnet-counters sebelum aplikasi Anda, sehingga aplikasi Anda ditangguhkan pada durasi. Disarankan Anda langsung menggunakan versi aplikasi mandiri atau menggunakan dotnet exec untuk meluncurkan aplikasi.