Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek se vztahuje na: ✔️ dotnet-trace 9.0.661903 a novější verze
Instalace
Existují dva způsoby, jak stáhnout a nainstalovat dotnet-trace:
dotnet global tool (globální nástroj dotnet):
Pokud chcete nainstalovat nejnovější verzi
dotnet-tracebalíčku NuGet, použijte příkaz dotnet tool install :dotnet tool install --global dotnet-tracePřímé stahování:
Stáhněte spustitelný soubor nástroje, který odpovídá vaší platformě:
Operační systém Platforma Windows x86 | x64 | Arm | arm-x64 Operační systém Linux x64 | Arm | Arm64 | musl-x64 | musl-Arm64
Synopse
dotnet-trace [-h, --help] [--version] <command>
Popis
Nástroj dotnet-trace :
Je multiplatformní nástroj .NET Core.
Umožňuje kolekci trasování .NET Core spuštěného procesu bez nativního profileru.
Je postaven na
EventPipemodulu runtime .NET Core.Podporuje dva různé způsoby shromažďování trasování:
- Příkaz
collectnabízí konzistentní funkce v jakémkoli operačním systému. -
Příkaz
collect-linuxpoužívá možnosti operačního systému specifického pro Linux k poskytování dalších funkcí.
Vlastnost collectcollect-linuxPodporovaný operační systém Jakýkoliv Pouze Linux, verze >jádra = 6.4 Vyžaduje oprávnění správce nebo kořenového adresáře. Ne Ano Trasování všech procesů současně Ne Podporováno Zachycení nativních událostí knihovny a jádra Ne Podporováno Zásobníky volání událostí zahrnují nativní rámce. Ne Ano - Příkaz
Možnosti
-h|--helpZobrazuje nápovědu k příkazovému řádku.
--versionZobrazí verzi nástroje dotnet-trace.
Příkazy
| Příkaz |
|---|
| dotnet-trace collect |
| dotnet-trace collect-linux |
| dotnet-trace convert |
| dotnet-trace ps |
| dotnet-trace list-profiles |
| dotnet-trace report |
dotnet-trace collect
Shromažďuje diagnostické trasování ze spuštěného procesu nebo spouští podřízený proces a trasuje ho (.NET 5 nebo novější). Pokud chcete, aby nástroj spustil podřízený proces a trasování z jeho spuštění, připojte -- ho k příkazu collect.
Synopse
dotnet-trace collect
[--buffersize <size>]
[--clreventlevel <clreventlevel>]
[--clrevents <clrevents>]
[--dsrouter <ios|ios-sim|android|android-emu>]
[--format <Chromium|NetTrace|Speedscope>]
[-h|--help]
[--duration dd:hh:mm:ss]
[-n, --name <name>]
[--diagnostic-port]
[-o|--output <trace-file-path>]
[-p|--process-id <pid>]
[--profile <list-of-comma-separated-profile-names>]
[--providers <list-of-comma-separated-providers>]
[-- <command>] (for target applications running .NET 5 or later)
[--show-child-io]
[--resume-runtime]
[--stopping-event-provider-name <stoppingEventProviderName>]
[--stopping-event-event-name <stoppingEventEventName>]
[--stopping-event-payload-filter <stoppingEventPayloadFilter>]
Možnosti
--buffersize <size>Nastaví velikost vyrovnávací paměti v megabajtech. Výchozí 256 MB.
Poznámka:
Pokud cílový proces generuje události rychleji, než je možné zapisovat na disk, může tato vyrovnávací paměť přetékat a některé události se zahodí. Tento problém můžete zmírnit zvýšením velikosti vyrovnávací paměti nebo snížením počtu zaznamenaných událostí.
--clreventlevel <clreventlevel>Úroveň podrobností událostí CLR, které se mají vygenerovat. Tato možnost se použije pouze v případě, že
--clreventsje zadána a není přepsána--profilepomocí nebo--providers. V následující tabulce jsou uvedeny dostupné úrovně událostí.Řetězcová hodnota Číselná hodnota logalways0critical1error2warning3informational4verbose5--clrevents <clrevents>Seznam klíčových slov zprostředkovatele modulu runtime CLR, která povolí oddělení znaménkami
+. Toto je jednoduché mapování, které umožňuje zadat klíčová slova událostí prostřednictvím řetězcových aliasů místo jejich šestnáctkových hodnot. Napříkladdotnet-trace collect --providers Microsoft-Windows-DotNETRuntime:3:4vyžaduje stejnou sadu událostí jakodotnet-trace collect --clrevents gc+gchandle --clreventlevel informational. Pokud je poskytovatel modulu runtimeMicrosoft-Windows-DotNETRuntimeCLR povolen také prostřednictvím--providersnebo--profileje tato možnost ignorována. V následující tabulce je seznam dostupných klíčových slov:Alias řetězce klíčového slova Hexní hodnota klíčového slova gc0x1gchandle0x2assemblyloader0x4loader0x8jit0x10ngen0x20startenumeration0x40endenumeration0x80security0x400appdomainresourcemanagement0x800jittracing0x1000interop0x2000contention0x4000exception0x8000threading0x10000jittedmethodiltonativemap0x20000overrideandsuppressngenevents0x40000type0x80000gcheapdump0x100000gcsampledobjectallocationhigh0x200000gcheapsurvivalandmovement0x400000managedheapcollect0x800000gcheapandtypenames0x1000000gcsampledobjectallocationlow0x2000000perftrack0x20000000stack0x40000000threadtransfer0x80000000debugger0x100000000monitoring0x200000000codesymbols0x400000000eventsource0x800000000compilation0x1000000000compilationdiagnostic0x2000000000methoddiagnostic0x4000000000typediagnostic0x8000000000jitinstrumentationdata0x10000000000profiler0x20000000000waithandle0x40000000000allocationsampling0x80000000000O poskytovateli CLR si můžete přečíst podrobněji v referenční dokumentaci k zprostředkovateli modulu runtime .NET.
--dsrouter {ios|ios-sim|android|android|android-emu}
Spustí dotnet-dsrouter a připojí se k němu. Vyžaduje instalaci dotnet-dsrouter . Další informace potřebujete spustit
dotnet-dsrouter -h.--format {Chromium|NetTrace|Speedscope}Nastaví výstupní formát pro převod trasovacích souborů. Výchozí hodnota je
NetTrace.-n, --name <name>Název procesu pro shromáždění trasování.
Poznámka:
V Linuxu a macOS vyžaduje použití této možnosti cílovou aplikaci a
dotnet-tracesdílení stejnéTMPDIRproměnné prostředí. Jinak vyprší časový limit příkazu.--diagnostic-port <port-address[,(listen|connect)]>Nastaví diagnostický port používaný ke komunikaci s procesem, který se má trasovat. dotnet-trace a modul runtime .NET v rámci cílového procesu musí souhlasit s adresou portu s jedním nasloucháním a druhým připojením. dotnet-trace automaticky určuje správný port při připojování pomocí
--process-idmožností nebo--namepři spuštění procesu pomocí-- <command>této možnosti. Obvykle je nutné zadat port explicitně při čekání na proces, který se spustí v budoucnu, nebo komunikovat s procesem spuštěným v kontejneru, který není součástí oboru názvů aktuálního procesu.Liší se
port-addresspodle operačního systému:- Linux a macOS – cesta k soketu domény Unixu, například
/foo/tool1.socket. - Windows – cesta k pojmenované svislé sadě, například
\\.\pipe\my_diag_port1. - Android, iOS a tvOS – IP:port, například
127.0.0.1:9000.
Ve výchozím nastavení
dotnet-tracenaslouchá na zadané adrese. Místo toho můžete požádat odotnet-tracepřipojení připojením,connectza adresou. Připojí se například--diagnostic-port /foo/tool1.socket,connectk procesu modulu runtime .NET, který naslouchá soketu domény unixu/foo/tool1.socket.Pokud chcete zjistit, jak pomocí této možnosti shromáždit trasování ze spuštění aplikace, přečtěte si téma Použití diagnostického portu ke shromažďování trasování od spuštění aplikace.
- Linux a macOS – cesta k soketu domény Unixu, například
--duration <time-to-run>Čas spuštění trasování.
dd:hh:mm:ssPoužijte formát. Například00:00:00:05se spustí po dobu 5 sekund.-o|--output <trace-file-path>Výstupní cesta pro shromážděná data trasování. Pokud není zadána výchozí hodnota
<appname>_<yyyyMMdd>_<HHmmss>.nettrace, například "myapp_20210315_111514.nettrace".-p|--process-id <PID>ID procesu, ze které se má trasování shromáždit.
Poznámka:
V Linuxu a macOS vyžaduje použití této možnosti cílovou aplikaci a
dotnet-tracesdílení stejnéTMPDIRproměnné prostředí. Jinak vyprší časový limit příkazu.--profile <list-of-comma-separated-profile-names>Profil je předdefinovaná sada konfigurací zprostředkovatele pro běžné scénáře trasování. Najednou lze zadat více profilů oddělených čárkami. Zprostředkovatelé nakonfigurovaní prostřednictvím
--providerspřepsání konfigurace profilu. Podobně pokud některý profil nakonfiguruje zprostředkovatele modulu runtime CLR, přepíše všechny konfigurace předepsané prostřednictvím--clrevents.Když
--profile,--providersa--clreventsjsou všechny vynechány,dotnet-trace collectpovolí profilydotnet-commonadotnet-sampled-thread-timeve výchozím nastavení.Dostupné profily:
Profil Popis dotnet-commonZjednodušená diagnostika modulu runtime .NET navržená tak, aby zůstala nízká režie.
Zahrnuje události GC, AssemblyLoader, Loader, JIT, Exceptions, Threading, JittedMethodILToNativeMap a Compilation.
Ekvivalent k--providers "Microsoft-Windows-DotNETRuntime:0x100003801D:4".dotnet-sampled-thread-timeVzorkuje zásobníky vláken .NET (~100 Hz) k identifikaci hotspotů v průběhu času. Používá ukázkový profiler modulu runtime se spravovanými zásobníky. gc-verboseSleduje přidělení objektů a kolekcí uvolňování paměti. gc-collectSleduje kolekce uvolňování paměti pouze při velmi nízké režii. databaseZaznamenává ADO.NET a příkazy databáze Entity Framework. Poznámka:
V předchozích verzích nástroje dotnet-trace podporoval příkaz collect název profilu
cpu-sampling. Tento profil byl odebrán, protože název byl zavádějící. Vzorkovala všechna vlákna bez ohledu na jejich využití procesoru. Podobný výsledek teď můžete dosáhnout pomocí .--profile dotnet-sampled-thread-time,dotnet-commonPokud potřebujete přesně shodovat s dřívějšímcpu-samplingchováním, použijte--profile dotnet-sampled-thread-time --providers "Microsoft-Windows-DotNETRuntime:0x14C14FCCBD:4".--providers <list-of-comma-separated-providers>Seznam poskytovatelů oddělených
EventPipečárkami, které se mají povolit. Tito poskytovatelé doplňují všechny poskytovatele odvozené .--profile <list-of-comma-separated-profile-names>Pokud je pro konkrétního poskytovatele nějaká nekonzistence, má tato konfigurace přednost před implicitní konfigurací od--profilea--clrevents.Tento seznam poskytovatelů je ve formátu
Provider[,Provider]:-
Providerje ve formátu:KnownProviderName[:Flags[:Level[:KeyValueArgs]]] -
KeyValueArgsje ve formátu:[key1=value1][;key2=value2]
Další informace o některých známých poskytovatelích v .NET najdete v části Známé zprostředkovatele událostí.
-
-- <command>(pro cílové aplikace se systémem .NET 5 nebo novějším)Po parametrech konfigurace kolekce může uživatel připojit
--následovaný příkazem pro spuštění aplikace .NET s alespoň modulem runtime 5.0. To může být užitečné při diagnostice problémů, ke kterým dochází v rané fázi procesu, jako jsou problémy s výkonem při spuštění nebo zavaděč sestavení a chyby pořadače.Poznámka:
Tato možnost monitoruje první proces .NET, který komunikuje zpět s nástrojem, což znamená, že pokud váš příkaz spustí více aplikací .NET, bude shromažďovat pouze první aplikaci. Proto se doporučuje tuto možnost použít u samostatných aplikací nebo použití této
dotnet exec <app.dll>možnosti.--show-child-ioZobrazuje vstupní a výstupní datové proudy spuštěného podřízeného procesu v aktuální konzole.
--resume-runtimeObnovení modulu runtime po inicializaci relace je výchozí hodnota true. Zakažte obnovení modulu runtime pomocí parametru --resume-runtime:false.
--stopping-event-provider-nameŘetězec, parsovaný tak, že zastaví trasování po dosažení události s odpovídajícím názvem zprostředkovatele. Pokud chcete konkrétnější událost zastavení, uveďte
--stopping-event-event-namea/nebo--stopping-event-payload-filter. Pokud chcete například--stopping-event-provider-name Microsoft-Windows-DotNETRuntimezastavit trasování při dosažení první události generované poskytovatelemMicrosoft-Windows-DotNETRuntimeudálosti.--stopping-event-event-nameŘetězec, parsovaný tak, že zastaví trasování po dosažení události s odpovídajícím názvem události. Vyžaduje
--stopping-event-provider-namenastavení. Pro konkrétnější událost zastavení navíc uveďte--stopping-event-payload-filter. Pokud chcete například--stopping-event-provider-name Microsoft-Windows-DotNETRuntime --stopping-event-event-name Method/JittingStartedzastavit trasování při dosažení prvníMethod/JittingStartedudálosti generované poskytovatelemMicrosoft-Windows-DotNETRuntimeudálosti.--stopping-event-payload-filterŘetězec parsovaný jako [payload_field_name]:[payload_field_value] oddělené čárkami, který zastaví trasování při dosažení události obsahující všechny zadané páry datové části. Vyžaduje
--stopping-event-provider-namea--stopping-event-event-namemusí být nastaven. Chcete-li například--stopping-event-provider-name Microsoft-Windows-DotNETRuntime --stopping-event-event-name Method/JittingStarted --stopping-event-payload-filter MethodNameSpace:Program,MethodName:OnButtonClickzastavit trasování při prvníMethod/JittingStartedudálosti metodyOnButtonClickvProgramoboru názvů generovaného poskytovatelemMicrosoft-Windows-DotNETRuntimeudálosti.
Poznámka:
- Zastavení trasování může u velkých aplikací trvat delší dobu (až minuty). Modul runtime musí odesílat přes mezipaměť typů pro veškerý spravovaný kód zachycený v trasování.
- Pokud chcete shromáždit trasování pomocí
dotnet-trace, musí být spuštěn jako stejný uživatel jako uživatel, který spouští cílový proces nebo jako kořen. Jinak se nástroj nepodaří navázat spojení s cílovým procesem.
- Pokud při spuštění
dotnet-trace collectdojde k neošetřené výjimce, výsledkem je neúplné trasování. Pokud je vaší prioritou zjištění původní příčiny výjimky, přejděte do části Shromáždit výpisy stavu systému v případě chybového ukončení. V důsledku neošetřené výjimky se trasování zkrátí, když se modul runtime vypne, aby se zabránilo dalšímu nežádoucímu chování, jako je zablokování nebo poškození dat. I když je trasování neúplné, můžete ho přesto otevřít, abyste zjistili, co se stalo, což vedlo k selhání. Na konci trasování ale chybí informace o rundownu (k tomu dochází na konci trasování), takže zásobníky můžou být nevyřešeny (v závislosti na tom, jaké poskytovatele byly zapnuté). Spuštěním perfView s/ContinueOnErrorpříznakem na příkazovém řádku otevřete trasování. Protokoly budou obsahovat také umístění, ve které byla výjimka aktivována.
- Při zadávání události zastavení prostřednictvím
--stopping-event-*možností, protože EventStream probíhá asynchronně, budou existovat některé události, které procházejí mezi časem, kdy se událost trasování odpovídající zadaným možnostem zastavení události parsuje a eventPipeSession se zastaví.
dotnet-trace collect-linux
Poznámka:
Příkaz collect-linux je nová funkce ve verzi Preview a spoléhá na aktualizovanou verzi formátu souboru .nettrace. Nejnovější verze PerfView podporuje tyto trasovací soubory, ale jiné způsoby použití trasovací soubor, například convert a report, nemusí ještě fungovat.
Shromažďuje diagnostické trasování pomocí perf_events, technologie operačního systému Linux.
collect-linux umožňuje následující další funkce v průběhu collect.
| Vlastnost | collect |
collect-linux |
|---|---|---|
| Podporovaný operační systém | Jakýkoliv | Pouze Linux, verze >jádra = 6.4 |
| Vyžaduje oprávnění správce nebo kořenového adresáře. | Ne | Ano |
| Trasování všech procesů současně | Ne | Podporováno |
| Zachycení nativních událostí knihovny a jádra | Ne | Podporováno |
| Zásobníky volání událostí zahrnují nativní rámce. | Ne | Ano |
Požadavky
- Jádro Linuxu s
CONFIG_USER_EVENTS=ypodporou (jádro 6.4+) - Kořenová oprávnění
- .NET 10+
Poznámka:
Příkaz collect-linux běží jenom v prostředích linux x64 a linux arm64, která mají glibc verze 2.35 nebo vyšší.
Všechny distribuce .NET 10 oficiálně podporované linuxovými distribucemi podporují tento požadavek s výjimkou Alpine 3.22, CentOS Stream 9 a všech distribucí založených na Red Hat Enterprise Linuxu 9.
Rychlý způsob, jak zkontrolovat verzi libc systému, je příkaz ldd --version nebo spuštění knihovny libc přímo.
Synopse
dotnet-trace collect-linux
[-h|--help]
# Provider/Event Specification
[--providers <list-of-comma-separated-providers>]
[--clreventlevel <clreventlevel>]
[--clrevents <clrevents>]
[--perf-events <list-of-perf-events>]
[--profile <list-of-comma-separated-profile-names>]
# Trace Collection
[-o|--output <trace-file-path>]
[--duration dd:hh:mm:ss]
# .NET Process Target (Optional)
[-n, --name <name>]
[-p|--process-id <pid>]
# Probe mode
[--probe]
Výchozí chování kolekce
Pokud --providers, --profile, --clreventsa --perf-events nejsou zadány, collect-linux povolí tyto profily ve výchozím nastavení:
-
dotnet-common– zjednodušená diagnostika modulu runtime .NET. -
cpu-sampling– vzorkování procesoru jádra.
Ve výchozím nastavení se všechny procesy na počítači trasují. Pokud chcete trasovat pouze jeden proces, použijte -n, --name <name> nebo -p|--process-id <PID>.
Možnosti
Možnosti specifikace poskytovatele nebo události
--providers <list-of-comma-separated-providers>Seznam poskytovatelů oddělených
EventPipečárkami, které se mají povolit. Tito poskytovatelé doplňují všechny poskytovatele odvozené .--profile <list-of-comma-separated-profile-names>Pokud je pro konkrétního poskytovatele nějaká nekonzistence, má tato konfigurace přednost před implicitní konfigurací od--profilea--clrevents.Tento seznam poskytovatelů je ve formátu
Provider[,Provider]:-
Providerje ve formátu:KnownProviderName[:Flags[:Level[:KeyValueArgs]]] -
KeyValueArgsje ve formátu:[key1=value1][;key2=value2]
Další informace o některých známých poskytovatelích v .NET najdete v tématu Známé zprostředkovatele událostí.
-
--clreventlevel <clreventlevel>Úroveň podrobností událostí CLR, které se mají vygenerovat. Tato možnost se použije pouze v případě, že
--clreventsje zadána a není přepsána--profilepomocí nebo--providers. V následující tabulce jsou uvedeny dostupné úrovně událostí.Řetězcová hodnota Číselná hodnota logalways0critical1error2warning3informational4verbose5--clrevents <clrevents>Seznam klíčových slov zprostředkovatele modulu runtime CLR, která povolí oddělení znaménkami
+. Toto je jednoduché mapování, které umožňuje zadat klíčová slova událostí prostřednictvím řetězcových aliasů místo jejich šestnáctkových hodnot. Napříkladdotnet-trace collect-linux --providers Microsoft-Windows-DotNETRuntime:3:4vyžaduje stejnou sadu událostí jakodotnet-trace collect-linux --clrevents gc+gchandle --clreventlevel informational. Pokud je poskytovatel modulu runtimeMicrosoft-Windows-DotNETRuntimeCLR povolen také prostřednictvím--providersnebo--profileje tato možnost ignorována. V následující tabulce je seznam dostupných klíčových slov:Alias řetězce klíčového slova Hexní hodnota klíčového slova gc0x1gchandle0x2assemblyloader0x4loader0x8jit0x10ngen0x20startenumeration0x40endenumeration0x80security0x400appdomainresourcemanagement0x800jittracing0x1000interop0x2000contention0x4000exception0x8000threading0x10000jittedmethodiltonativemap0x20000overrideandsuppressngenevents0x40000type0x80000gcheapdump0x100000gcsampledobjectallocationhigh0x200000gcheapsurvivalandmovement0x400000managedheapcollect0x800000gcheapandtypenames0x1000000gcsampledobjectallocationlow0x2000000perftrack0x20000000stack0x40000000threadtransfer0x80000000debugger0x100000000monitoring0x200000000codesymbols0x400000000eventsource0x800000000compilation0x1000000000compilationdiagnostic0x2000000000methoddiagnostic0x4000000000typediagnostic0x8000000000jitinstrumentationdata0x10000000000profiler0x20000000000waithandle0x40000000000allocationsampling0x80000000000O poskytovateli CLR si můžete přečíst podrobněji v referenční dokumentaci k zprostředkovateli modulu runtime .NET.
--perf-events <list-of-perf-events>Čárkami oddělený seznam událostí výkonu, které se mají zahrnout do trasování. Dostupné události lze najít v trasovacích souborech, které jsou obvykle připojené na
/sys/kernel/tracingadrese , prostřednictvímavailable_eventsvšech dostupných událostí nebo prostřednictvímevents/podadresáře pro události zařazené do kategorií.Příklad:
--perf-events syscalls:sys_enter_execve,sched:sched_switch,sched:sched_wakeup--profile <list-of-comma-separated-profile-names>Profil je předdefinovaná sada konfigurací zprostředkovatele pro běžné scénáře trasování. Najednou lze zadat více profilů oddělených čárkami. Zprostředkovatelé nakonfigurovaní prostřednictvím
--providerspřepsání konfigurace profilu. Podobně pokud některý profil nakonfiguruje zprostředkovatele modulu runtime CLR, přepíše všechny konfigurace předepsané prostřednictvím--clrevents.Když
--profile,--providers,--clreventsa jsou všechny--perf-eventsvynechány,dotnet-trace collect-linuxpovolí profilydotnet-commonacpu-samplingve výchozím nastavení.Dostupné profily:
Profil Popis dotnet-commonZjednodušená diagnostika modulu runtime .NET navržená tak, aby zůstala nízká režie.
Zahrnuje události GC, AssemblyLoader, Loader, JIT, Exceptions, Threading, JittedMethodILToNativeMap a Compilation.
Ekvivalent k--providers "Microsoft-Windows-DotNETRuntime:0x100003801D:4".cpu-samplingVzorkování procesoru jádra (založené na výkonu) generované jako Universal.Events/cpupro přesné přisuzování procesoru na procesoru.thread-timePřepínače kontextu vlákna jádra, které se generují jako Universal.Events/cswitch, pro analýzu on/off-CPU a plánovače.gc-verboseSleduje přidělení objektů a kolekcí uvolňování paměti. gc-collectSleduje kolekce uvolňování paměti pouze při velmi nízké režii. databaseZaznamenává ADO.NET a příkazy databáze Entity Framework.
Možnosti kolekce trasování
-o|--output <trace-file-path>Výstupní cesta pro shromážděná data trasování. Pokud není zadáno, nastaví se výchozí
trace_<yyyyMMdd>_<HHmmss>.nettracetrasování na úrovni počítače a trasování<appname>_<yyyyMMdd>_<HHmmss>.nettracespecifické pro proces (--namenebo--process-id)--duration <time-to-run>Čas spuštění trasování.
dd:hh:mm:ssPoužijte formát. Například00:00:00:05se spustí po dobu 5 sekund.
Možnosti cíle procesu .NET
Zobrazit výchozí chování shromažďování
-n, --name <name>Název procesu pro shromáždění trasování.
-p|--process-id <PID>ID procesu, ze které se má trasování shromáždit.
Možnosti režimu sondy
--probe [-n|--name] [-p|--process-id] [-o|--output <stdout|output-filename>]Sonda procesů .NET pro podporu příkazu EventPipe UserEvents IPC, který používá collect-linux, bez shromažďování trasování Seznam výsledků nejprve podporuje procesy. Pomocí příkazu -o stdout vytiskněte soubor CSV (pid, processName, supportsCollectLinux) do konzoly nebo -o output-filename pro zápis souboru CSV. Sonda jednoho procesu pomocí -n|--name nebo -p|--process-id.
Vzhledem k tomu, že spuštění
collect-linuxv režimu sondy neshromažďuje trasování, nevyžaduje ke spuštění kořenová oprávnění. Neposkytuje ověření požadavků a procesy .NET spuštěné ve verzích preview modulu .NET Runtime 10.0.0 se považují za nepodporované.
Poznámka:
Pokud chcete shromáždit trasování pomocí
dotnet-trace collect-linux, musí se spouštět s oprávněními uživatele root (CAP_PERFMON/CAP_SYS_ADMIN). Jinak nástroj neshromažďuje události.
dotnet-trace convert
nettrace Převede trasování na alternativní formáty pro použití s nástroji pro analýzu alternativních trasování.
Synopse
dotnet-trace convert [<input-filename>] [--format <Chromium|NetTrace|Speedscope>] [-h|--help] [-o|--output <output-filename>]
Argumenty
<input-filename>Vstupní trasovací soubor, který se má převést. Výchozí hodnota je trace.nettrace.
Možnosti
--format <Chromium|NetTrace|Speedscope>Nastaví výstupní formát pro převod trasovacích souborů.
-o|--output <output-filename>Výstupní název souboru Přidá se rozšíření cílového formátu.
Poznámka:
Převod nettrace souborů na chromium soubory nebo speedscope soubory je nevratný.
speedscope a chromium soubory nemají všechny informace potřebné k rekonstrukci nettrace souborů.
convert Příkaz však zachová původní nettrace soubor, takže ho neodstraňovat, pokud ho budete chtít otevřít v budoucnu.
dotnet-trace ps
Obsahuje seznam procesů dotnet, ze které lze shromažďovat trasování.
dotnet-trace 6.0.320703 a novější zobrazte také argumenty příkazového řádku, se kterými byly jednotlivé procesy spuštěny, pokud jsou k dispozici.
Poznámka:
Pokud chcete získat úplné informace pro výčet 64bitových procesů, musíte použít 64bitovou verzi dotnet-trace nástroje.
Synopse
dotnet-trace ps [-h|--help]
Příklad
Předpokládejme, že spustíte dlouhotrvající aplikaci pomocí příkazu dotnet run --configuration Release. V jiném okně spustíte dotnet-trace ps příkaz. Výstup, který uvidíte, je následující. Argumenty příkazového řádku, pokud jsou k dispozici, se zobrazují ve dotnet-trace verzi 6.0.320703 a novější.
> dotnet-trace ps
21932 dotnet C:\Program Files\dotnet\dotnet.exe run --configuration Release
36656 dotnet C:\Program Files\dotnet\dotnet.exe
dotnet-trace list-profiles
Uvádí předem vytvořené profily trasování s popisem, jaké zprostředkovatele a filtry jsou v jednotlivých profilech.
Synopse
dotnet-trace list-profiles [-h|--help]
dotnet-trace report
Vytvoří sestavu do stdoutu z dříve vygenerovaného trasování.
Synopse
dotnet-trace report [-h|--help] <tracefile> [command]
Argumenty
<tracefile>Cesta k souboru analyzovaného trasování.
Příkazy
dotnet-trace report topN
Vyhledá horní N metody, které byly v náznamku volání nejdelší.
Synopse
dotnet-trace report <tracefile> topN [-n|--number <n>] [--inclusive] [-v|--verbose] [-h|--help]
Možnosti
-n|--number <n>
Dává horní N metody na volání.
--inclusive
Výstup hlavních N metod založených na inkluzivním čase Pokud nezadáte, použije se ve výchozím nastavení výhradní čas.
-v|--verbose
Vypište parametry každé metody v plném rozsahu. Pokud není zadáno, parametry budou zkráceny.
Shromáždění trasování pomocí dotnet-trace
Shromažďování trasování pomocí dotnet-trace collect:
Získejte identifikátor procesu (PID) aplikace .NET Core, ze které se shromažďují trasování.
- Ve Windows můžete například použít Správce úloh nebo
tasklistpříkaz. - Například v Linuxu příkaz
ps. - dotnet-trace ps
- Ve Windows můžete například použít Správce úloh nebo
Spusťte následující příkaz:
dotnet-trace collect --process-id <PID>Předchozí příkaz generuje výstup podobný následujícímu:
No profile or providers specified, defaulting to trace profiles 'dotnet-common' + 'dotnet-sampled-thread-time'. Provider Name Keywords Level Enabled By Microsoft-Windows-DotNETRuntime 0x000000100003801D Informational(4) --profile Microsoft-DotNETCore-SampleProfiler 0x0000F00000000000 Informational(4) --profile Process : <full-path-to-process-being-trace> Output File : <process>_20251007_154557.nettrace [00:00:00:02] Recording trace 178.172 (KB) Press <Enter> or <Ctrl+C> to exit... Stopping the trace. This may take several minutes depending on the application being traced. Trace completed.Zastavte shromažďování stisknutím klávesy Enter .
dotnet-tracedokončí protokolování událostí do.nettracesouboru.
Spuštění podřízené aplikace a shromáždění trasování ze spuštění pomocí dotnet-trace
Někdy může být užitečné shromáždit trasování procesu od jeho spuštění. U aplikací, na kterých běží .NET 5 nebo novější, je to možné provést pomocí dotnet-trace.
Tím se spustí hello.exearg1 argumenty příkazového řádku a arg2 shromáždí se trasování z spuštění modulu runtime:
dotnet-trace collect -- hello.exe arg1 arg2
Předchozí příkaz generuje výstup podobný následujícímu:
No profile or providers specified, defaulting to trace profiles 'dotnet-common' + 'dotnet-sampled-thread-time'.
Provider Name Keywords Level Enabled By
Microsoft-Windows-DotNETRuntime 0x000000100003801D Informational(4) --profile
Microsoft-DotNETCore-SampleProfiler 0x0000F00000000000 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...
Trasování můžete zastavit stisknutím nebo <Enter> klávesou<Ctrl + C>. Tím dojde také k ukončení hello.exe.
Poznámka:
hello.exe Spuštění přes dotnet-trace přesměruje jeho vstup/výstup a ve výchozím nastavení s ním nebudete moct pracovat v konzole.
--show-child-io Pomocí přepínače můžete pracovat s jeho stdin/stdout.
Ukončení nástroje pomocí kombinace kláves CTRL+C nebo SIGTERM bezpečně ukončí nástroj i podřízený proces.
Pokud se podřízený proces ukončí před nástrojem, nástroj se ukončí a trasování by mělo být bezpečně zobrazitelné.
Shromažďování trasování ze spuštění aplikace pomocí diagnostického portu
Diagnostický port je funkce modulu runtime přidaná v .NET 5, která umožňuje spustit trasování od spuštění aplikace. K tomu dotnet-tracemůžete použít buď použití dotnet-trace collect -- <command> , jak je popsáno v příkladech výše, nebo použít --diagnostic-port možnost.
Použití dotnet-trace <collect|monitor> -- <command> ke spuštění aplikace jako podřízeného procesu je nejjednodušší způsob, jak rychle trasovat aplikaci od jejího spuštění.
Pokud ale chcete získat přehlednější kontrolu nad životností aplikace, která se sleduje (například monitorujte aplikaci pouze po dobu prvních 10 minut a pokračujte v provádění), nebo pokud potřebujete pracovat s aplikací pomocí rozhraní příkazového řádku, můžete pomocí --diagnostic-port možnosti řídit jak monitorovanou dotnet-tracecílovou aplikaci, tak i .
Následující příkaz vytvoří
dotnet-tracediagnostický soket s názvemmyport.socka počká na připojení.dotnet-trace collect --diagnostic-port myport.sockVýstup:
Waiting for connection on myport.sock Start an application with the following environment variable: DOTNET_DiagnosticPorts=/home/user/myport.sockV samostatné konzole spusťte cílovou aplikaci s proměnnou
DOTNET_DiagnosticPortsprostředí nastavenou na hodnotu ve výstupudotnet-trace.export DOTNET_DiagnosticPorts=/home/user/myport.sock ./my-dotnet-app arg1 arg2To by pak mělo umožnit
dotnet-tracespuštění trasovánímy-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.Důležité
Spuštění aplikace
dotnet runpomocí aplikace může být problematické, protože rozhraní příkazového řádku dotnet může vytvořit mnoho podřízených procesů, které nejsou vaší aplikací, a můžou se připojitdotnet-tracepřed aplikací a nechat aplikaci pozastavenou za běhu. Doporučujeme přímo použít samostatnou verzi aplikace nebo ji spustitdotnet exec.
(jenom Linux) Shromažďování trasování na úrovni počítače pomocí dotnet-trace
Tento příklad zachycuje ukázky procesoru pro všechny procesy na počítači. Všechny procesy, na kterých běží .NET 10 nebo novější, budou obsahovat také některé další odlehčené události popisující chování načítání GC, JIT a Sestavení.
$ sudo dotnet-trace collect-linux
==========================================================================================
The collect-linux verb is a new preview feature and relies on an updated version of the
.nettrace file format. The latest PerfView release supports these trace files but other
ways of using the trace file may not work yet. For more details, see the docs at
https://learn.microsoft.com/dotnet/core/diagnostics/dotnet-trace.
==========================================================================================
No providers, profiles, ClrEvents, or PerfEvents were specified, defaulting to trace profiles 'dotnet-common' + 'cpu-sampling'.
Provider Name Keywords Level Enabled By
Microsoft-Windows-DotNETRuntime 0x000000100003801D Informational(4) --profile
Linux Perf Events Enabled By
cpu-sampling --profile
Output File : <path-to-nettrace>trace_20251008_181939.nettrace
[00:00:00:03] Recording trace.
Press <Enter> or <Ctrl-C> to exit...
Recording stopped.
Resolving symbols.
Finished recording trace.
Trace written to <path-to-nettrace>trace_20251008_181939.nettrace
U prostředí s nainstalovanými několika verzemi .NET pomáhá spuštění collect-linux v režimu sondy zjistit, jestli je proces .NET schopný trasovat pomocí collect-linuxu.
$ dotnet-trace collect-linux --probe
==========================================================================================
The collect-linux verb is a new preview feature and relies on an updated version of the
.nettrace file format. The latest PerfView release supports these trace files but other
ways of using the trace file may not work yet. For more details, see the docs at
https://learn.microsoft.com/dotnet/core/diagnostics/dotnet-trace.
==========================================================================================
Probing .NET processes for support of the EventPipe UserEvents IPC command used by collect-linux. Requires runtime '10.0.0' or later.
.NET processes that support the command:
3802935 MyApp
.NET processes that do NOT support the command:
3809123 dotnet - Detected runtime: '10.0.0-rc.1.25451.107'
Zobrazení trasování zachyceného z dotnet-trace
Ve Windows můžete zobrazit soubory .nettrace v sadě Visual Studio nebo PerfView pro účely analýzy.
V Linuxu můžete trasování zobrazit změnou výstupního dotnet-trace formátu na speedscope. Pomocí této možnosti změňte formát výstupního -f|--format souboru. Můžete si vybrat mezi nettrace (výchozí možností) a speedscope. Tato možnost -f speedscope vytvoří dotnet-tracespeedscope soubor.
Speedscope soubory lze otevřít na adrese https://www.speedscope.app.
U trasování shromážděných na platformách jiných než Windows můžete trasovací soubor přesunout do počítače s Windows a zobrazit ho v sadě Visual Studio nebo PerfView.
Poznámka:
Modul runtime .NET Core generuje trasování ve nettrace formátu. Trasování se po dokončení trasování převede na speedscope (pokud je zadáno). Vzhledem k tomu, že některé převody můžou vést ke ztrátě dat, původní nettrace soubor se zachová vedle převedeného souboru.
Použití souboru .rsp k tomu, abyste se vyhnuli psaní dlouhých příkazů
Můžete spustit dotnet-trace soubor .rsp , který obsahuje argumenty, které se mají předat. To může být užitečné při povolování poskytovatelů, kteří očekávají dlouhé argumenty, nebo při použití prostředí prostředí, které odstraní znaky.
Například následující poskytovatel může být těžkopádný k zadání pokaždé, když chcete trasovat:
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
Předchozí příklad navíc obsahuje " jako součást argumentu. Vzhledem k tomu, že uvozovky se nezpracují rovnoměrně v jednotlivých prostředích, můžete při používání různých prostředí zaznamenat různé problémy. Například příkaz, který zsh se má zadat, se liší od příkazu v cmd.
Místo toho, abyste tento text pokaždé zapisovat, můžete uložit následující text do souboru s názvem myprofile.rsp.
--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
Po uložení myprofile.rspmůžete s touto konfigurací spustit dotnet-trace pomocí následujícího příkazu:
dotnet-trace @myprofile.rsp