dotnet-trace performans analizi yardımcı programı
Bu makale şu sürümler için geçerlidir: ✔️ .NET Core 3.0 SDK ve sonraki sürümleri
Yükleme
indirip yüklemenin iki yolu dotnet-trace vardır:
dotnet genel aracı:
NuGet paketinin en son
dotnet-traceyayın sürümünü yüklemek için dotnet tool install komutunu kullanın:dotnet tool install --global dotnet-traceDoğrudan indirme:
Platformla eşleşen araç yürütülebilir dosyasını indirin:
İşletim Sistemi Platform Windows x86 | x64 | Kol | arm-x64 Mac OS x64 Linux x64 | Kol | arm64 | musl-x64 | musl-arm64
Not
Bir dotnet-trace x86 uygulamasında kullanmak için aracın ilgili x86 sürümüne ihtiyacınız vardır.
Özet
dotnet-trace [-h, --help] [--version] <command>
Description
dotnet-traceAraç:
- Platformlar arası bir .NET Core aracıdır.
- Yerel profil oluşturma olmadan çalışan bir işlem için .NET Core izlemelerinin toplanmasına olanak sağlar.
EventPipe.NET Core çalışma zamanı üzerinde yerleşiktir.- Aynı deneyimi Windows, Linux veya macOS'ta sunar.
Seçenekler
-h|--helpKomut satırı yardımlarını gösterir.
--versiondotnet-trace yardımcı programı sürümünü görüntüler.
Komutlar
| Komut |
|---|
| dotnet-trace collect |
| dotnet-trace convert |
| dotnet-trace ps |
| dotnet-trace list-profiles |
| dotnet-trace report |
dotnet-trace collect
Çalışan bir işlemden tanılama izlemesi toplar veya bir alt işlemi başlatarak izler (yalnızca.NET 5+ ). Aracın bir alt işlemi çalıştırmasını ve başlangıçtan izlemesini yapmak için -- collect komutunun sonuna ekleme.
Özet
dotnet-trace collect [--buffersize <size>] [--clreventlevel <clreventlevel>] [--clrevents <clrevents>]
[--format <Chromium|NetTrace|Speedscope>] [-h|--help]
[-n, --name <name>] [--diagnostic-port] [-o|--output <trace-file-path>] [-p|--process-id <pid>]
[--profile <profile-name>] [--providers <list-of-comma-separated-providers>]
[--show-child-io]
[-- <command>] (for target applications running .NET 5 or later)
Seçenekler
--buffersize <size>Bellek içinde döngüsel arabelleğin boyutunu megabayt cinsinden ayarlar. Varsayılan 256 MB.
Not
Hedef işlem olayları çok sık yazarsa, bu arabellekte taşma olabilir ve bazı olaylar bırakılır. Çok fazla olay bırakılırsa, bırakılan olay sayısının azaldığna bakarak arabellek boyutunu artır. Bırakılan olayların sayısı daha büyük bir arabellek boyutuyla azalmazsa, bunun nedeni hedef işlem arabelleklerinin boşaltan yavaş bir okuyucu olması olabilir.
--clreventlevel <clreventlevel>Yayma CLR olaylarının ayrıntılılığı.
--clrevents <clrevents>İşaretlerle ayırarak etkinleştirilen CLR çalışma zamanı sağlayıcısı anahtar
+sözcüklerinin listesi. Bu, olay anahtar sözcüklerini, bunların hex değerleri yerine dize diğer adları aracılığıyla belirtmenize olanak sağlayan basit bir eşlemedir. Örneğin,dotnet-trace collect --providers Microsoft-Windows-DotNETRuntime:3:4ile aynı olay kümesine istektedotnet-trace collect --clrevents gc+gchandle --clreventlevel informationallar. Aşağıdaki tabloda kullanılabilir anahtar sözcüklerin listesi gösterilmiştir:Anahtar Sözcük Dizesi Diğer Adı Anahtar Sözcük Altılık Değer gc0x1gchandle0x2fusion0x4loader0x8jit0x10ngen0x20startenumeration0x40endenumeration0x80security0x400appdomainresourcemanagement0x800jittracing0x1000interop0x2000contention0x4000exception0x8000threading0x10000jittedmethodiltonativemap0x20000overrideandsuppressngenevents0x40000type0x80000gcheapdump0x100000gcsampledobjectallocationhigh0x200000gcheapsurvivalandmovement0x400000gcheapcollect0x800000gcheapandtypenames0x1000000gcsampledobjectallocationlow0x2000000perftrack0x20000000stack0x40000000threadtransfer0x80000000debugger0x100000000monitoring0x200000000codesymbols0x400000000eventsource0x800000000compilation0x1000000000compilationdiagnostic0x2000000000methoddiagnostic0x4000000000typediagnostic0x8000000000CLR sağlayıcısı hakkında daha fazla bilgi için bkz. .NETçalışma zamanı sağlayıcısı başvuru belgeleri.
--format {Chromium|NetTrace|Speedscope}İzleme dosyası dönüştürme için çıkış biçimini ayarlar. Varsayılan değer:
NetTrace.-n, --name <name>İzlemeyi toplama işleminin adı.
--diagnostic-port <path-to-port>Oluşturulan tanılama bağlantı noktasının adı. Bu seçeneği kullanarak uygulama başlangıcından izleme toplama hakkında bilgi edinmek için bkz. Uygulama başlangıcından izleme toplamak için tanılama bağlantı noktasını kullanma.
-o|--output <trace-file-path>Toplanan izleme verileri için çıkış yolu. Belirtilmezse, varsayılan olarak
trace.nettracekullanılır.-p|--process-id <PID>İzlemeyi toplamak için işlem kimliği.
--profile <profile-name>Yaygın izleme senaryolarının kısa ve öz bir şekilde belirtilebilir olması için önceden tanımlanmış adlandırılmış sağlayıcı yapılandırmaları kümesi. Aşağıdaki profiller kullanılabilir:
| Profil | Description |
|---|---|
cpu-sampling |
CPU kullanımını ve genel .NET çalışma zamanı bilgilerini izlemek için kullanışlıdır. Profil veya sağlayıcı belirtilmezse bu varsayılan seçenektir. |
gc-verbose |
GC koleksiyonlarını ve örnekleri nesne ayırmalarını izler. |
gc-collect |
GC koleksiyonlarını yalnızca çok düşük ek yükte izler. |
--providers <list-of-comma-separated-providers>Etkinleştirilen sağlayıcıların
EventPipevirgülle ayrılmış listesi. Bu sağlayıcılar, tarafından yapılan tüm sağlayıcıları--profile <profile-name>tamamlar. Belirli bir sağlayıcı için tutarsızlık varsa, bu yapılandırma profilden örtülü yapılandırmaya göre önceliklidir.Bu sağlayıcı listesi şu şekildedir:
Provider[,Provider]Providerşu formdadır:KnownProviderName[:Flags[:Level][:KeyValueArgs]].KeyValueArgsşu formdadır:[key1=value1][;key2=value2].
.NET'te bilinen sağlayıcılardan bazıları hakkında daha fazla bilgi edinmek için Bkz. İyi Bilinen Olay Sağlayıcıları.
-- <command>(yalnızca .NET 5 çalıştıran hedef uygulamalar için)Koleksiyon yapılandırma parametrelerinin ardından kullanıcı, en az 5.0 çalışma zamanı ile bir .NET uygulaması başlatmak için bir komut
--ek olarak ekleme yapar. Bu, başlatma performansı sorunu veya derleme yükleyicisi ve bağlayıcı hataları gibi sürecin başlarında oluşan sorunları tanılarken yararlı olabilir.Not
Bu seçeneğin kullanımı, araçla yeniden iletişim kuran ilk .NET 5 işlemini izler. Bu, komutunuz birden çok .NET uygulaması başlatıyorsa yalnızca ilk uygulamayı toplayan anlamına gelir. Bu nedenle, kendi içinde uygulamalar veya seçeneğini kullanarak bu seçeneğin kullanılması
dotnet exec <app.dll>önerilir.--show-child-ioGeçerli konsolda başlatılan bir alt işlem giriş ve çıkış akışlarını gösterir.
Not
büyük uygulamalar için izlemenin durdurulması uzun sürebilir (en fazla dakika). Çalışma zamanının, izlemede yakalanan tüm yönetilen kodlar için tür önbelleği üzerinden göndermesi gerekir.
Not
Linux ve macOS'ta bu komut, hedef uygulamayı bekler ve dotnet-trace aynı ortam TMPDIR değişkenini paylaşır. Aksi takdirde komut zaman akçesi olur.
Not
kullanarak bir izleme toplamak için, hedef işlemi çalıştıran kullanıcıyla aynı kullanıcı veya dotnet-trace kök olarak çalıştırılır. Aksi takdirde, araç hedef işlemle bağlantı kuramayacaktır.
Not
Aşağıdakine benzer bir hata iletisi görüyorsanız: , hedef işlemde eşleşmeyen bitlik olan [ERROR] System.ComponentModel.Win32Exception (299): A 32 bit processes cannot access modules of a 64 bit process. bir hata iletisi kullanmaya dotnet-trace çalışıyorsanız. Yükleme bağlantısında aracın doğru bitliğini indirmiş olduğundan emin olun.
dotnet-trace convert
İzlemeleri nettrace alternatif izleme analizi araçlarıyla kullanmak üzere alternatif biçimlere dönüştürür.
Özet
dotnet-trace convert [<input-filename>] [--format <Chromium|NetTrace|Speedscope>] [-h|--help] [-o|--output <output-filename>]
Bağımsız değişkenler
<input-filename>Dönüştürülecek izleme dosyasını girdi. Varsayılan olarak trace.nettrace kullanılır.
Seçenekler
--format <Chromium|NetTrace|Speedscope>İzleme dosyası dönüştürme için çıkış biçimini ayarlar.
-o|--output <output-filename>Çıktı dosya adı. Hedef biçimin uzantısı eklenecektir.
Not
Dosyaları nettrace veya chromium speedscope dosyalarına dönüştürmek geri alınamaz. speedscope ve chromium dosyalarında dosyaları yeniden oluştur için gereken tüm bilgiler nettrace yoktur. Ancak, komut özgün dosyayı korur, bu nedenle gelecekte açmayı planlıyorsanız convert nettrace bu dosyayı silmeyin.
dotnet-trace ps
İzlemelerin toplanabilir olduğu dotnet işlemlerini listeler.
Özet
dotnet-trace ps [-h|--help]
dotnet-trace list-profiles
Önceden yerleşik izleme profillerini listeler ve her profilde hangi sağlayıcıların ve filtrelerin olduğunu belirtir.
Özet
dotnet-trace list-profiles [-h|--help]
dotnet-trace report
Daha önce oluşturulan bir izlemeden stdout'a bir rapor oluşturur.
Özet
dotnet-trace report [-h|--help] <tracefile> [command]
Bağımsız değişkenler
<tracefile>Analiz olan izlemenin dosya yolu.
Komutlar
dotnet-trace report topN
Çağrı yığınında en uzun olan ilk N yöntemi bulur.
Özet
dotnet-trace report <tracefile> topN [-n|--number <n>] [--inclusive] [-v|--verbose] [-h|--help]
Seçenekler
-n|--number <n>
Çağrı yığınında ilk N yöntemi verir.
--inclusive
Kapsayıcı saati temel alarak ilk N yöntemin çıkışını verir. Belirtilmezse, varsayılan olarak özel zaman kullanılır.
-v|--verbose
Her yöntemin parametrelerini tam olarak çıktı olarak girin. Belirtilmezse parametreler kesilir.
dotnet-trace ile izleme toplama
kullanarak izlemeleri toplamak dotnet-trace için:
İzlemeleri toplamak için .NET Core uygulamasının işlem tanımlayıcısını (PID) alma.
- Bu Windows, Görev Yöneticisi'ni veya
tasklistkomutunu kullanabilirsiniz, örneğin. - Örneğin Linux'ta
pskomutu. - dotnet-trace ps
- Bu Windows, Görev Yöneticisi'ni veya
Şu komutu çalıştırın:
dotnet-trace collect --process-id <PID>Yukarıdaki komut aşağıdakine benzer bir çıktı oluşturur:
Press <Enter> to exit... Connecting to process: <Full-Path-To-Process-Being-Profiled>/dotnet.exe Collecting to file: <Full-Path-To-Trace>/trace.nettrace Session Id: <SessionId> Recording trace 721.025 (KB)tuşuna basarak koleksiyonu
<Enter>durdurun.dotnet-traceolayları trace.nettrace dosyasına kaydetmeyi tamamlar.
Bir alt uygulamayı başlatma ve dotnet-trace kullanarak başlangıçtan bir izleme toplama
Önemli
Bu, yalnızca .NET 5 veya sonraki bir çalıştıran uygulamalar için çalışır.
Bazen başlangıçtan bir sürecin izlemesini toplamak yararlı olabilir. .NET 5 veya sonraki bir çalıştıran uygulamalarda bunu dotnet-trace kullanarak yapmak mümkündür.
Komut satırı hello.exe bağımsız değişkenleri olarak ve ile arg1 arg2 başlatılır ve çalışma zamanı başlangıcından bir izleme toplar:
dotnet-trace collect -- hello.exe arg1 arg2
Yukarıdaki komut aşağıdakine benzer bir çıktı oluşturur:
No profile or providers specified, defaulting to trace profile 'cpu-sampling'
Provider Name Keywords Level Enabled By
Microsoft-DotNETCore-SampleProfiler 0x0000F00000000000 Informational(4) --profile
Microsoft-Windows-DotNETRuntime 0x00000014C14FCCBD Informational(4) --profile
Process : E:\temp\gcperfsim\bin\Debug\net5.0\gcperfsim.exe
Output File : E:\temp\gcperfsim\trace.nettrace
[00:00:00:05] Recording trace 122.244 (KB)
Press <Enter> or <Ctrl+C> to exit...
veya tuşuna basarak izleme toplamayı <Enter> <Ctrl + C> durdur. Bunu yapmak da çıkışından hello.exe çıkar.
Not
dotnet-trace aracılığıyla başlatma, giriş/çıkışını yeniden yönlendirecek ve varsayılan olarak konsolda bu bağlantıyla hello.exe etkileşim kuramayacaksınız. --show-child-iostdin/stdout ile etkileşim kurmak için anahtarını kullanın.
CTRL+C veya SIGTERM aracılığıyla araçtan çıkmak hem aracı hem de alt işlemi güvenli bir şekilde sonlar.
Alt işlem araçtan önce çıkarsa, araç da çıkış olur ve izleme güvenli bir şekilde değiştirilebilir.
Uygulama başlangıcından izleme toplamak için tanılama bağlantı noktasını kullanma
Önemli
Bu, yalnızca .NET 5 veya sonraki bir çalıştıran uygulamalar için çalışır.
Tanılama bağlantı noktası, .NET 5'e eklenen ve uygulama başlangıcından izlemeyi başlatmaya olanak sağlayan yeni bir çalışma zamanı özelliğidir. Bunu kullanarak yapmak dotnet-trace için, yukarıdaki dotnet-trace collect -- <command> örneklerde açıklandığı gibi kullanabilir veya seçeneğini --diagnostic-port kullanabilirsiniz.
Uygulamayı dotnet-trace <collect|monitor> -- <command> alt işlem olarak başlatmak için kullanmak, uygulamayı başlangıçtan hızla izlemenin en kolay yolu olur.
Ancak, izlenen uygulamanın ömrü üzerinde daha iyi bir denetim elde etmek (örneğin, uygulamayı yalnızca ilk 10 dakika boyunca izlemek ve yürütmeye devam etmek) ya da CLI kullanarak uygulamayla etkileşime geçmeniz gerekirse, seçeneği kullanarak hem izlenen hedef uygulamayı hem de 'i denetlemenizi --diagnostic-port dotnet-trace sağlar.
Aşağıdaki komut,
dotnet-traceadlı bir tanılama yuvası oluşturmanızı ve bağlantımyport.sockbeklemeyi sağlar.dotnet-trace 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.sockAyrı bir konsolda, çıkışta değerine ayarlanmış ortam
DOTNET_DiagnosticPortsdeğişkeniyle hedef uygulamayıdotnet-tracebaşlatın.export DOTNET_DiagnosticPorts=/home/user/myport.sock ./my-dotnet-app arg1 arg2Bunun ardından izlemeyi
dotnet-tracebaşlatmayı etkinleştirmesimy-dotnet-appgerekir: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ıza bağlanmadan önce bağlanarak çalışma zamanında askıya alınarak askıya
dotnet rundotnet-tracealınabilir. Doğrudan uygulamanın kendi içinde bir sürümünü veya uygulamayı başlatmak içindotnet execkullanma önerilir.
dotnet-trace'den yakalanan izlemeyi görüntüleme
Bu Windows.nettrace dosyaları analiz için PerfView'da görüntülenebiliyor: Diğer platformlarda toplanan izlemeler için izleme dosyası, PerfView'da Windows bir Windows makinesine taşınabiliyor.
Linux'ta izleme, çıkış biçimi olarak değiştirerek dotnet-trace speedscope biçimlendirilmiş. Çıkış dosyası biçimi seçeneği kullanılarak -f|--format değiştirilebilir; -f speedscope bu, bir dotnet-trace dosya üretmeye neden speedscope olur. ile arasında nettrace seçim (varsayılan seçenek) seçeneğini speedscope belirleyin. Speedscope dosyaları, 'de https://www.speedscope.app açılabilir.
Not
.NET Core çalışma zamanı biçiminde izlemeler nettrace üretir. İzleme tamamlandıktan sonra izlemeler speedscope'a dönüştürülür (belirtilmişse). Bazı dönüştürmeler veri kaybına neden olduğu için özgün nettrace dosya dönüştürülen dosyanın yanında korunur.
Zaman içinde sayaç değerlerini toplamak için dotnet-trace kullanma
dotnet-trace -bilirsiniz:
- Performansa
EventCounterduyarlı ortamlarda temel sistem durumu izlemesi için kullanın. Örneğin, üretimde. - İzlemeleri toplayın, böylece gerçek zamanlı olarak görüntülemeleri gereksin.
Örneğin, çalışma zamanı performans sayacı değerlerini toplamak için aşağıdaki komutu kullanın:
dotnet-trace collect --process-id <PID> --providers System.Runtime:0:1:EventCounterIntervalSec=1
Yukarıdaki komut, basit sistem durumu izlemesi için çalışma zamanı sayaçlarına her saniye bir rapor bildirmesini söyler. değerinin EventCounterIntervalSec=1 daha yüksek bir değerle (örneğin, 60) değiştirilmesi, sayaç verisinde daha az ayrıntıyla daha küçük bir izlemenin toplanmasına olanak sağlar.
Aşağıdaki komut ek yükü ve izleme boyutunu öncekinden daha fazla azaltır:
dotnet-trace collect --process-id <PID> --providers System.Runtime:0:1:EventCounterIntervalSec=1,Microsoft-Windows-DotNETRuntime:0:1,Microsoft-DotNETCore-SampleProfiler:0:1
Yukarıdaki komut çalışma zamanı olaylarını ve yönetilen yığın profilleyicisini devre dışı bırakıyor.
Uzun komutlar yazmaktan kaçınmak için .rsp dosyası kullanma
Geçiş için dotnet-trace bağımsız değişkenleri içeren bir .rsp dosyayla başlatabilirsiniz. Bu, uzun bağımsız değişkenler beklenen sağlayıcılar etkinleştirildi veya karakterleri şeritle alan bir kabuk ortamı kullanılırken yararlı olabilir.
Örneğin, aşağıdaki sağlayıcı her izleme istediğiniz zaman yazma zahmetli olabilir:
dotnet-trace collect --providers Microsoft-Diagnostics-DiagnosticSource:0x3:5:FilterAndPayloadSpecs="SqlClientDiagnosticListener/System.Data.SqlClient.WriteCommandBefore@Activity1Start:-Command;Command.CommandText;ConnectionId;Operation;Command.Connection.ServerVersion;Command.CommandTimeout;Command.CommandType;Command.Connection.ConnectionString;Command.Connection.Database;Command.Connection.DataSource;Command.Connection.PacketSize\r\nSqlClientDiagnosticListener/System.Data.SqlClient.WriteCommandAfter@Activity1Stop:\r\nMicrosoft.EntityFrameworkCore/Microsoft.EntityFrameworkCore.Database.Command.CommandExecuting@Activity2Start:-Command;Command.CommandText;ConnectionId;IsAsync;Command.Connection.ClientConnectionId;Command.Connection.ServerVersion;Command.CommandTimeout;Command.CommandType;Command.Connection.ConnectionString;Command.Connection.Database;Command.Connection.DataSource;Command.Connection.PacketSize\r\nMicrosoft.EntityFrameworkCore/Microsoft.EntityFrameworkCore.Database.Command.CommandExecuted@Activity2Stop:",OtherProvider,AnotherProvider
Ayrıca, önceki örnek bağımsız " değişkeninin bir parçası olarak içerir. Tırnaklar her kabuk tarafından eşit şekilde işlenemeyce, farklı kabuklar kullanırken çeşitli sorunlar yaşanabilirsiniz. Örneğin, içine girilen zsh komut, içinde komutuyla cmd farklıdır.
Bunu her zaman yazmak yerine aşağıdaki metni adlı bir dosyaya myprofile.rsp kaydedebilirsiniz.
--providers
Microsoft-Diagnostics-DiagnosticSource:0x3:5:FilterAndPayloadSpecs="SqlClientDiagnosticListener/System.Data.SqlClient.WriteCommandBefore@Activity1Start:-Command;Command.CommandText;ConnectionId;Operation;Command.Connection.ServerVersion;Command.CommandTimeout;Command.CommandType;Command.Connection.ConnectionString;Command.Connection.Database;Command.Connection.DataSource;Command.Connection.PacketSize\r\nSqlClientDiagnosticListener/System.Data.SqlClient.WriteCommandAfter@Activity1Stop:\r\nMicrosoft.EntityFrameworkCore/Microsoft.EntityFrameworkCore.Database.Command.CommandExecuting@Activity2Start:-Command;Command.CommandText;ConnectionId;IsAsync;Command.Connection.ClientConnectionId;Command.Connection.ServerVersion;Command.CommandTimeout;Command.CommandType;Command.Connection.ConnectionString;Command.Connection.Database;Command.Connection.DataSource;Command.Connection.PacketSize\r\nMicrosoft.EntityFrameworkCore/Microsoft.EntityFrameworkCore.Database.Command.CommandExecuted@Activity2Stop:",OtherProvider,AnotherProvider
kaydettiktan myprofile.rsp sonra, aşağıdaki komutu dotnet-trace kullanarak bu yapılandırmayla başlatabilirsiniz:
dotnet-trace @myprofile.rsp