Performans sayaçlarını araştırma (dotnet-counters)
Bu makale şunlar için geçerlidir: ✔️ dotnet-counters
sürüm 3.0.47001 ve sonraki sürümler.
Sayaçlar .NET 5 veya üzerini çalıştıran uygulamalardan okunabilir.
Yükleme
İndirmenin ve yüklemenin dotnet-counters
iki yolu vardır:
dotnet genel aracı:
NuGet paketinin en son sürüm sürümünü
dotnet-counters
yüklemek için dotnet tool install komutunu kullanın:dotnet tool install --global dotnet-counters
Doğrudan indirme:
Platformunuzla eşleşen araç yürütülebilir dosyasını indirin:
OS Platform Windows x86 | x64 | Arm | Arm-x64 Linux x64 | Arm | Arm64 | musl-x64 | musl-Arm64
Not
Bir x86 uygulamasında kullanmak dotnet-counters
için aracın ilgili x86 sürümünü kullanmanız gerekir.
Özet
dotnet-counters [-h|--help] [--version] <command>
Açıklama
dotnet-counters
geçici sistem durumu izleme ve birinci düzey performans araştırması için bir performans izleme aracıdır. API veya Meter API aracılığıyla EventCounter yayımlanan performans sayacı değerlerini gözlemleyebilir. Örneğin, veya dotnet-trace
kullanarak PerfView
daha ciddi bir performans araştırmasına geçmeden önce şüpheli bir şey olup olmadığını görmek için CPU kullanımı veya .NET Core uygulamanızda oluşan özel durum oranı gibi öğeleri hızla izleyebilirsiniz.
Seçenekler
--version
dotnet-counters yardımcı programının sürümünü görüntüler.
-h|--help
Komut satırı yardımlarını gösterir.
Komutlar
Command |
---|
dotnet-counters collect |
dotnet-counters listesi |
dotnet-counters izleyicisi |
dotnet-counters ps |
dotnet-counters collect
Seçili sayaç değerlerini düzenli aralıklarla toplayın ve bunları işlem sonrası için belirtilen dosya biçiminde dışarı aktarın.
Özet
dotnet-counters collect [-h|--help] [-p|--process-id] [-n|--name] [--diagnostic-port] [--refresh-interval] [--counters <COUNTERS>] [--format] [-o|--output] [-- <command>]
Seçenekler
-p|--process-id <PID>
Sayaç verilerini toplama işleminin kimliği.
-n|--name <name>
Sayaç verilerini toplama işleminin adı.
--diagnostic-port
Oluşturulacak tanılama bağlantı noktasının adı. Uygulama başlangıcından izleme sayaçlarını başlatmak için bu seçeneğin nasıl kullanılacağını öğrenmek için tanılama bağlantı noktasını kullanma konusuna bakın.
--refresh-interval <SECONDS>
Görüntülenen sayaçların güncelleştirilmesi arasındaki gecikme süresi saniye sayısı
--counters <COUNTERS>
Virgülle ayrılmış sayaç listesi. Sayaçlar belirtilebilir
provider_name[:counter_name]
.provider_name
uygun bir sayaç listesi olmadan kullanılıyorsa, sağlayıcının tüm sayaçları gösterilir. Sağlayıcı ve sayaç adlarını bulmak için dotnet-counters list komutunu kullanın. EventCounters için EventSource'unprovider_name
adı, Ölçümlerprovider_name
için ise Ölçüm'ün adıdır.--format <csv|json>
Dışarı aktarılacak biçim. Şu anda kullanılabilir: csv, json.
-o|--output <output>
Çıktı dosyasının adı.
-- <command>
Koleksiyon yapılandırma parametrelerinden sonra, kullanıcı bir .NET uygulaması başlatmak için bir komut ekleyebilir
--
.dotnet-counters
komutuyla bir işlem başlatır ve istenen ölçümleri toplar. Bu genellikle uygulamanın başlangıç yolu için ölçümleri toplamak için yararlıdır ve ana giriş noktasından önce veya kısa süre sonra gerçekleşen sorunları tanılamak veya izlemek için kullanılabilir.Not
Bu seçeneğin kullanılması, araca geri iletişim kuran ilk .NET işlemini izler, yani komutunuz birden çok .NET uygulaması başlatırsa yalnızca ilk uygulamayı toplar. Bu nedenle, bu seçeneği bağımsız uygulamalarda veya seçeneğini kullanarak kullanmanız
dotnet exec <app.dll>
önerilir.Not
dotnet-counters aracılığıyla bir .NET yürütülebilir dosyasının başlatılması giriş/çıkışını yeniden yönlendirir ve stdin/stdout ile etkileşim kuramazsınız. CTRL+C veya SIGTERM aracılığıyla araçdan çıkmak hem aracı hem de alt işlemi güvenli bir şekilde sonlandıracaktır. Alt işlem araçdan önce çıkarsa, araç da çıkar. stdin/stdout kullanmanız gerekiyorsa seçeneğini kullanabilirsiniz
--diagnostic-port
. Daha fazla bilgi için bkz . Tanılama bağlantı noktasını kullanma.
Not
Linux ve macOS'ta bu komut hedef uygulamanın ve dotnet-counters
aynı TMPDIR
ortam değişkenini paylaşmasını bekler. Aksi takdirde, komut zaman aşımına uğradı.
Not
kullanarak dotnet-counters
ölçümleri toplamak için hedef işlemi çalıştıran kullanıcıyla aynı kullanıcı veya kök olarak çalıştırılması gerekir. Aksi takdirde araç hedef işlemle bağlantı kuramaz.
Örnekler
3 saniyelik yenileme aralığında tüm sayaçları toplayın ve çıkış olarak bir csv oluşturun:
> 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.
Alt işlem olarak başlayın
dotnet mvc.dll
ve başlangıçtan çalışma zamanı sayaçlarını ve ASP.NET Core Hosting sayaçlarını toplamaya başlayın ve bunu bir JSON çıkışı olarak kaydedin:> 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 listesi
Sağlayıcıya göre gruplandırılmış sayaç adlarının ve açıklamalarının listesini görüntüler.
Özet
dotnet-counters list [-h|--help]
Örnek
> 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
Not
Sayaçlar Microsoft.AspNetCore.Hosting
, örneğin konak makinede bir ASP.NET Core uygulaması çalışırken, bu sayaçları destekleyen işlemler tanımlandığında görüntülenir.
dotnet-counters izleyicisi
Seçili sayaçların düzenli aralıklarla yenilenen değerlerini görüntüler.
Özet
dotnet-counters monitor [-h|--help] [-p|--process-id] [-n|--name] [--diagnostic-port] [--refresh-interval] [--counters] [-- <command>]
Seçenekler
-p|--process-id <PID>
İzlenecek işlemin kimliği.
-n|--name <name>
İzlenecek işlemin adı.
--diagnostic-port
Oluşturulacak tanılama bağlantı noktasının adı. Uygulama başlangıcından izleme sayaçlarını başlatmak için bu seçeneğin nasıl kullanılacağını öğrenmek için tanılama bağlantı noktasını kullanma konusuna bakın.
--refresh-interval <SECONDS>
Görüntülenen sayaçların güncelleştirilmesi arasındaki gecikme süresi saniye sayısı
--counters <COUNTERS>
Virgülle ayrılmış sayaç listesi. Sayaçlar belirtilebilir
provider_name[:counter_name]
.provider_name
uygun bir sayaç listesi olmadan kullanılıyorsa, sağlayıcının tüm sayaçları gösterilir. Sağlayıcı ve sayaç adlarını bulmak için dotnet-counters list komutunu kullanın. EventCounters için EventSource'unprovider_name
adı, Ölçümlerprovider_name
için ise Ölçüm'ün adıdır.
-- <command>
Koleksiyon yapılandırma parametrelerinden sonra, kullanıcı bir .NET uygulaması başlatmak için bir komut ekleyebilir --
. dotnet-counters
komutuyla bir işlem başlatır ve istenen ölçümleri izler. Bu genellikle uygulamanın başlangıç yolu için ölçümleri toplamak için yararlıdır ve ana giriş noktasından önce veya kısa süre sonra gerçekleşen sorunları tanılamak veya izlemek için kullanılabilir.
Not
Bu seçeneğin kullanılması, araca geri iletişim kuran ilk .NET işlemini izler, yani komutunuz birden çok .NET uygulaması başlatırsa yalnızca ilk uygulamayı toplar. Bu nedenle, bu seçeneği bağımsız uygulamalarda veya seçeneğini kullanarak kullanmanız dotnet exec <app.dll>
önerilir.
Not
dotnet-counters aracılığıyla bir .NET yürütülebilir dosyasının başlatılması giriş/çıkışını yeniden yönlendirir ve stdin/stdout ile etkileşim kuramazsınız. CTRL+C veya SIGTERM aracılığıyla araçdan çıkmak hem aracı hem de alt işlemi güvenli bir şekilde sonlandıracaktır. Alt işlem araçdan önce çıkarsa, araç da çıkar. stdin/stdout kullanmanız gerekiyorsa seçeneğini kullanabilirsiniz --diagnostic-port
. Daha fazla bilgi için bkz . Tanılama bağlantı noktasını kullanma.
Not
Linux ve macOS'ta bu komut hedef uygulamanın ve dotnet-counters
aynı TMPDIR
ortam değişkenini paylaşmasını bekler.
Not
kullanarak dotnet-counters
ölçümleri izlemek için hedef işlemi çalıştıran kullanıcıyla aynı kullanıcı veya kök olarak çalıştırılması gerekir.
Not
Aşağıdakine benzer bir hata iletisi görürseniz: [ERROR] System.ComponentModel.Win32Exception (299): A 32 bit processes cannot access modules of a 64 bit process.
hedef işleme karşı eşleşmeyen bitlik içeren bir hata iletisi kullanmaya dotnet-counters
çalışıyorsunuzdur. Yükleme bağlantısında aracın doğru bitliğini indirdiğinizden emin olun.
Örnekler
Tüm sayaçları
System.Runtime
3 saniyelik bir yenileme aralığında izleyin:> 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
'den
System.Runtime
yalnızca CPU kullanımını ve GC yığın boyutunu izleyin:> 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
Kullanıcı tanımlı
EventSource
değerinden değerleri izleyinEventCounter
. Daha fazla bilgi için bkz . Öğretici: .NET Core'da EventCounters kullanarak performansı ölçme.> dotnet-counters monitor --process-id 1902 --counters Samples-EventCounterDemos-Minimal Press p to pause, r to resume, q to quit. request 100
içinde
dotnet-counters
kullanılabilen tüm iyi bilinen sayaçları görüntüleyin:> 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
.NET 5 uygulamalarında kullanılabilen
dotnet-counters
tüm iyi bilinen sayaçları görüntüleyin:> 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
Başlangıçtan yüklenen derlemelerin #'sini başlatın
my-aspnet-server.exe
ve izleyin:> 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
komut satırı bağımsız değişkenleriyle ve
arg2
komutarg1
satırı bağımsız değişkenleriyle başlatınmy-aspnet-server.exe
ve başlangıçtan çalışma kümesini ve GC yığın boyutunu izleyin:> 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
tarafından dotnet-counters
izleyebileceğiniz dotnet işlemlerini listeler.
dotnet-counters
sürüm 6.0.320703 ve üzeri, varsa her işlemin başlatıldığı komut satırı bağımsız değişkenlerini de görüntüler.
Özet
dotnet-counters ps [-h|--help]
Örnek
komutunu dotnet run --configuration Release
kullanarak uzun süre çalışan bir uygulama başlattığınızı varsayalım. Başka bir pencerede komutunu çalıştırırsınız dotnet-counters ps
. Göreceğiniz çıkış aşağıdaki gibidir. Varsa, komut satırı bağımsız değişkenleri 6.0.320703 ve sonraki sürümlerde dotnet-counters
gösterilir.
> dotnet-counters ps
21932 dotnet C:\Program Files\dotnet\dotnet.exe run --configuration Release
36656 dotnet C:\Program Files\dotnet\dotnet.exe
Tanılama bağlantı noktasını kullanma
Tanılama bağlantı noktası , uygulama başlangıcından sayaçları izlemeye veya toplamaya başlamanızı sağlayan bir çalışma zamanı özelliğidir. Bunu kullanarak dotnet-counters
yapmak için yukarıdaki örneklerde açıklandığı gibi kullanabilir dotnet-counters <collect|monitor> -- <command>
veya seçeneğini kullanabilirsiniz --diagnostic-port
.
dotnet-counters <collect|monitor> -- <command>
Uygulamayı alt işlem olarak başlatmak için kullanmak, uygulamayı başlangıçtan itibaren hızlı bir şekilde izlemenin en kolay yoludur.
Ancak, izlenen uygulamanın ömrü üzerinde daha iyi bir denetim elde etmek istediğinizde (örneğin, uygulamayı yalnızca ilk 10 dakika izleyin ve yürütmeye devam edin) veya CLI kullanarak uygulamayla etkileşime geçmeniz gerekiyorsa, seçeneğini kullanarak --diagnostic-port
hem izlenen dotnet-counters
hedef uygulamayı hem de 'yi denetlemenize olanak tanır.
Aşağıdaki komut dotnet-counters adlı bir tanılama yuvası
myport.sock
oluşturur ve bağlantı bekler.dotnet-counters collect --diagnostic-port myport.sock
Çıktı:
Waiting for connection on myport.sock Start an application with the following environment variable: DOTNET_DiagnosticPorts=/home/user/myport.sock
Ayrı bir konsolda, ortam değişkeni
DOTNET_DiagnosticPorts
çıkıştakidotnet-counters
değere ayarlanmış şekilde hedef uygulamayı başlatın.export DOTNET_DiagnosticPorts=/home/user/myport.sock ./my-dotnet-app arg1 arg2
Bu, üzerinde sayaçları
my-dotnet-app
toplamaya başlamak için etkinleştirilmelidirdotnet-counters
: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.
Önemli
dotnet run
dotnet CLI'sı uygulamanız olmayan ve uygulamanızdan önce bağlanabilendotnet-counters
birçok alt işlem ortaya çıkarabildiğinden uygulamanızın başlatılması sorun olabilir ve bu işlem uygulamanızı çalışma zamanında askıya alınır duruma bırakır. Doğrudan uygulamanın bağımsız bir sürümünü kullanmanız veya uygulamayı başlatmak için kullanmanızdotnet exec
önerilir.