Aracılığıyla paylaş


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 kullanmanın dotnet-countersüç yolu vardır:

  • Tek seferlik yürütme (önerilir):

    .NET 10.0.100'den başlayarak, kullanarak dotnet-counterskalıcı yükleme olmadan çalıştırabilirsinizdnx:

    dnx dotnet-counters [options]
    

    Örneğin:

    dnx dotnet-counters monitor --process-id 1234
    

    Bu yaklaşım, sisteminizi kalıcı olarak değiştirmeden en son sürümü otomatik olarak indirir ve çalıştırır.

  • dotnet genel aracı:

    dotnet-counters en son sürüm sürümünü sık kullanım için yüklemek için dotnet tool install komutunu kullanın:

    dotnet tool install --global dotnet-counters
    

    Bu komut, .NET SDK Araçları yolunuza bir dotnet-counters ikili dosya yükler. Bu ikili dosyaya genel olarak yüklenmiş araçları kolayca çağırmak için PATH'inize ekleyebilirsiniz.

  • 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 EventCounter API aracılığıyla Meter yayımlanan performans sayacı değerlerini gözlemleyebilir. Örneğin, veya PerfViewkullanarak dotnet-trace 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

    Yardımcı programın sürümünü dotnet-counters görüntüler.

  • -h|--help

    Komut satırı yardımlarını gösterir.

Komutlar

Command
dotnet-counters collect
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.

    Not

    Linux ve macOS'ta bu seçeneği kullanmak için hedef uygulamanın ve dotnet-counters aynı TMPDIR ortam değişkenini paylaşması gerekir. Aksi takdirde, komut zaman aşımına uğradı.

  • -n|--name <name>

    Sayaç verilerini toplama işleminin adı.

    Not

    Linux ve macOS'ta bu seçeneği kullanmak için hedef uygulamanın ve dotnet-counters aynı TMPDIR ortam değişkenini paylaşması gerekir. Aksi takdirde, komut zaman aşımına uğradı.

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

    İzlenecek işlemle iletişim kurmak için kullanılan tanılama bağlantı noktasını ayarlar. dotnet-counters ve hedef işlemin içindeki .NET çalışma zamanı, bağlantı noktası adresi üzerinde bir dinleme ve diğeri bağlanarak kabul etmelidir. dotnet-countersveya --process-id seçeneklerini kullanarak eklerken veya seçeneğini kullanarak --name-- <command> bir işlem başlatırken doğru bağlantı noktasını otomatik olarak belirler. Genellikle yalnızca gelecekte başlayacak bir işlemi beklerken veya geçerli işlem ad alanının parçası olmayan bir kapsayıcı içinde çalışan bir işlemle iletişim kurarken bağlantı noktasını açıkça belirtmek gerekir.

    işletim port-address sistemine göre farklılık gösterir:

    • Linux ve macOS - gibi /foo/tool1.socketbir Unix etki alanı yuvası yolu.
    • Windows - gibi \\.\pipe\my_diag_port1adlandırılmış bir kanalın yolu.
    • Android, iOS ve tvOS - gibi 127.0.0.1:9000bir IP:bağlantı noktası.

    Varsayılan olarak, dotnet-counters belirtilen adreste dinler. Adresin arkasına ekleyerek dotnet-counters bunun yerine bağlanma isteğinde ,connect bulunabilirsiniz. Örneğin, --diagnostic-port /foo/tool1.socket,connect Unix etki alanı yuvasını dinleyen bir .NET çalışma zamanı işlemine /foo/tool1.socket bağlanır.

    Uygulama başlangıcından izleme sayaçlarını başlatmak için bu seçeneği kullanma hakkında bilgi için bkz. Tanılama bağlantı noktasını kullanma.

  • --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 bkz. yerleşik ölçümler. EventCounters için EventSource'un provider_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 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 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

    aracılığıyla dotnet-countersbir .NET yürütülebilir dosyasını başlatırsanız, girişi/çıkışı yeniden yönlendirilir ve stdin/stdout dosyasıyla etkileşim kuramazsınız. Hem aracı hem de alt işlemi güvenli bir şekilde sonlandırmak için Ctrl+C veya SIGTERM aracılığıyla araçdan çıkabilirsiniz. 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

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 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 bkz. yerleşik ölçümler. EventCounters için EventSource'un provider_name adı, Ölçümlerprovider_name için ise Ölçüm'ün adıdır.

  • -- <command>

    Koleksiyon yapılandırma parametrelerinden sonra, bir .NET uygulaması başlatmak için komutun sonuna ekleyebilirsiniz -- . 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

    aracılığıyla dotnet-counters 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. Hem aracı hem de alt işlemi güvenli bir şekilde sonlandırmak için Ctrl+C veya SIGTERM aracılığıyla araçdan çıkabilirsiniz. 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ışıyorsunuz demektir. 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
    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
    

    Not

    Uygulama .NET sürüm 8 veya üzerini kullanıyorsa, System.Runtime Meter bu sürümlerde yoktur ve dotnet-counters bunun yerine eski System.Runtime EventCounters'ı görüntülemek için geri döner. Burada gösterildiği gibi kullanıcı arabirimi biraz farklı görünür.

    [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
    
  • yalnızca çöp toplamalarını ve atık toplama yığın ayırmayı izleyin 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
    
    
  • Kullanıcı tanımlı EventCounterdeğerinden değerleri izleyinEventSource. 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
    
  • Başlangıçtan yüklenen derlemelerin #'sini başlatın my-aspnet-server.exe ve izleyin:

    > 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
    
  • komut satırı bağımsız değişkenleriyle ve my-aspnet-server.exe komut arg1 satırı bağımsız değişkenleriyle başlatın arg2 ve başlangıçtan çalışma kümesini ve GC yığın boyutunu izleyin:

    > 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

tarafından dotnet-countersizleyebileceğ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 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ördüğünüz çı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-countersyapmak için, önceki ö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-countershedef uygulamayı hem de 'yi denetlemenize olanak tanır.

  1. Aşağıdaki komut dotnet-counters adlı myport.sock bir tanılama yuvası 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
    
  2. Ayrı bir konsolda, ortam değişkeni DOTNET_DiagnosticPorts çıkıştaki dotnet-counters değere ayarlanmış şekilde hedef uygulamayı başlatın.

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

    Bu, üzerinde dotnet-counterssayaçları toplamaya başlamanızı sağlarmy-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.
    

    Önemli

    dotnet CLI'sı uygulamanız olmayan ve uygulamanızdan önce bağlanabilen dotnet-counters birçok alt işlem ortaya çıkarabileceği ve uygulamanızı çalışma zamanında askıya alınmış durumda bırakabileceği için uygulamanızı ile dotnet run başlatmak sorunlu olabilir. Doğrudan uygulamanın bağımsız bir sürümünü kullanmanız veya uygulamayı başlatmak için kullanmanız dotnet exec önerilir.