Menyelidiki penghitung kinerja (penghitung dotnet)
Artikel ini berlaku untuk: ✔️ dotnet-counters
versi 3.0.47001 dan versi yang lebih baru.
Penghitung dapat dibaca dari aplikasi yang menjalankan .NET 5 atau yang lebih baru.
Instal
Ada dua cara untuk mengunduh dan menginstal dotnet-counters
:
alat global dotnet:
Untuk menginstal versi rilis terbaru paket
dotnet-counters
NuGet, gunakan perintah penginstalan alat dotnet:dotnet tool install --global dotnet-counters
Pengunduhan langsung:
Unduh alat yang dapat dijalankan yang cocok dengan platform Anda:
OS Platform Windows x86 | x64 | Arm | Arm-x64 Linux x64 | Arm | Arm64 | musl-x64 | musl-Arm64
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]
. Jikaprovider_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>
Setelah parameter konfigurasi koleksi, pengguna dapat menambahkan
--
diikuti dengan perintah untuk memulai aplikasi .NET.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 pertama yang berkomunikasi kembali ke alat, yang berarti jika perintah Anda meluncurkan beberapa aplikasi .NET, itu 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 .NET executable melalui dotnet-counters akan mengalihkan input/output-nya 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. 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]
. Jikaprovider_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>
Setelah parameter konfigurasi koleksi, pengguna dapat menambahkan --
diikuti dengan perintah untuk memulai aplikasi .NET. 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 pertama yang berkomunikasi kembali ke alat, yang berarti jika perintah Anda meluncurkan beberapa aplikasi .NET, itu 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 .NET executable melalui dotnet-counters akan mengalihkan input/output-nya 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
dariEventSource
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:> 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
denganarg1
danarg2
sebagai argumen baris perintah dan pantau set kerja dan ukuran tumpukan GC dari startup-nya:> 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
Port diagnostik adalah fitur runtime 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
.
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
Di konsol terpisah, luncurkan aplikasi target dengan variabel lingkungan
DOTNET_DiagnosticPorts
yang diatur ke nilai dalam outputdotnet-counters
.export DOTNET_DiagnosticPorts=/home/user/myport.sock ./my-dotnet-app arg1 arg2
Ini kemudian harus memungkinkan
dotnet-counters
untuk mulai mengumpulkan penghitung padamy-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 kedotnet-counters
sebelum aplikasi Anda, sehingga aplikasi Anda ditangguhkan pada durasi. Disarankan Anda langsung menggunakan versi aplikasi mandiri atau menggunakandotnet exec
untuk meluncurkan aplikasi.