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

Yükleme

İndirmenin ve yüklemenin dotnet-countersiki yolu vardır:

Not

Bir x86 uygulamasında kullanmak dotnet-counters için aracın karşılık gelen bir x86 sürümüne ihtiyacınız vardır.

Özet

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

Description

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-tracekullanarak PerfView daha ciddi bir performans araştırmasına geçmeden önce şüpheli bir şey olup olmadığını görmek için .NET Core uygulamanızda CPU kullanımı veya özel durumların 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ım gösterir.

Komutlar

Komut
dotnet-counters collect
dotnet-counters listesi
dotnet-counters izleyicisi
dotnet-counters ps

dotnet-counters collect

Seçilen 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 toplayacak işlemin kimliği.

  • -n|--name <name>

    Sayaç verilerini toplayacak 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, provider_name EventSource'un adı, Ölçümprovider_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> (yalnızca .NET 5 veya üzerini çalıştıran hedef uygulamalar için)

    Koleksiyon yapılandırma parametrelerinden sonra kullanıcı, en az 5.0 çalışma zamanına sahip bir .NET uygulaması başlatmak için bir komut ekleyebilir -- . dotnet-counters sağlanan komutla 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 bir 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 5 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ın yeniden yönlendirilmesini sağlar 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 ve izleme güvenli bir şekilde görüntülenebilir olmalıdır. 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 uyacaktır.

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ındotnet mvc.dll, çalışma zamanı sayaçlarını toplamaya başlayın ve başlangıçtan Barındırma sayaçlarını ASP.NET Core ve 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çlarMicrosoft.AspNetCore.Hosting, bu sayaçları destekleyen işlemler tanımlandığında( örneğin, konak makinede bir ASP.NET Core uygulaması çalıştırıldığında) görüntülenir.

dotnet-counters izleyicisi

Seçili sayaçların değerlerini düzenli aralıklarla yenileyerek 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, provider_name EventSource'un adı, Ölçümprovider_name için ise Ölçüm'ün adıdır.

-- <command> (yalnızca .NET 5 veya üzerini çalıştıran hedef uygulamalar için)

Koleksiyon yapılandırma parametrelerinden sonra kullanıcı, en az 5.0 çalışma zamanına sahip bir .NET uygulaması başlatmak için bir komut ekleyebilir -- . dotnet-counters sağlanan komutla 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 bir 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 5 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ın yeniden yönlendirilmesini sağlar 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şlemle eşleşmeyen bitlik içeren bir hata iletisi kullanmaya dotnet-counters çalışıyorsunuzdur. Yükleme bağlantısında aracın doğru bit durumunu indirdiğinizden emin olun.

Örnekler

  • 3 saniyelik yenileme aralığından tüm sayaçları System.Runtime 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.Runtimeyalnı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ı EventSourcedeğ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-counterskullanı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 (yalnızca.NET 5 veya üzeri):

    Önemli

    Bu, yalnızca .NET 5 veya üzerini çalıştıran uygulamalar için çalışır.

    > 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 ile arg1 başlatın my-aspnet-server.exe ve başlangıçtan itibaren çalışma kümesini ve GC yığın boyutunu izleyin (yalnızca.NET 5 veya üzeri):

    Önemli

    Bu, yalnızca .NET 5 veya üzerini çalıştıran uygulamalar için çalışır.

    > 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-countersizlenebilen 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 Releasekullanarak 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

Önemli

Bu, yalnızca .NET 5 veya üzerini çalıştıran uygulamalar için çalışır.

Tanılama bağlantı noktası , .NET 5'te eklenen ve uygulama başlangıcından sayaçları izlemeye veya toplamaya başlamanıza olanak tanıyan bir çalışma zamanı özelliğidir. Bunu kullanarak dotnet-countersyapmak 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 basit 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şim kurmanız gerekiyorsa, seçeneğini kullanarak --diagnostic-port hem izlenen dotnet-countershem de hedef uygulamayı denetlemenize olanak tanır.

  1. Aşağıdaki komut, dotnet-counters'ın adlı myport.sock bir tanılama yuvası oluşturmasını ve bağlantı beklemesini sağlar.

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

    Çıkış:

    Waiting for connection on myport.sock
    Start an application with the following environment variable: DOTNET_DiagnosticPorts=/home/user/myport.sock
    
  2. Ayrı bir konsolda, ortam değişkeni DOTNET_DiagnosticPorts çıktıdaki dotnet-counters değere ayarlanmış şekilde hedef uygulamayı başlatın.

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

    Bu daha sonra üzerinde my-dotnet-appsayaçları 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 CLI uygulamanız olmayan ve uygulamanızdan önce bağlanabilen dotnet-counters ve uygulamanızı çalışma zamanında askıya alınmış durumda bırakan birçok alt işlem ortaya çıkarabileceğinden, uygulamanızı ile dotnet run başlatmak sorunlu olabilir. Uygulamanın kendi içinde bulunan bir sürümünü doğrudan kullanmanız veya uygulamayı başlatmak için kullanmanız dotnet exec önerilir.