Megosztás:


dotnet-trace teljesítményelemzési segédprogram

Ez a cikk a következő verziókra vonatkozik: ✔️ dotnet-trace 9.0.661903 és újabb verziók

Telepítés

Kétféleképpen tölthető le és telepíthető dotnet-trace:

Szinopszis

dotnet-trace [-h, --help] [--version] <command>

Leírás

Az dotnet-trace eszköz:

  • Platformfüggetlen .NET Core-eszköz.

  • Lehetővé teszi egy futó folyamat .NET Core-nyomkövetéseinek gyűjtését natív profilkészítő nélkül.

  • A .NET Core-futtatókörnyezetre EventPipe épül.

  • A nyomkövetések gyűjtésének két különböző módját támogatja:

    • Az collect ige konzisztens funkciókat kínál bármely operációs rendszeren.
    • Az collect-linux ige Linux-specifikus operációsrendszer-képességeket használ további funkciók biztosításához.
    Tulajdonság collect collect-linux
    Támogatott operációs rendszer Bármely Csak Linux, kernelverzió >= 6.4
    Rendszergazdai/gyökérjogosítványt igényel Nem Igen
    Az összes folyamat nyomon követése egyidejűleg Nem Támogatott
    Natív kódtár- és kernelesemények rögzítése Nem Támogatott
    Az eseményhívások natív kereteket tartalmaznak Nem Igen

Beállítások

  • -h|--help

    Parancssori súgót jelenít meg.

  • --version

    Megjeleníti a dotnet-trace segédprogram verzióját.

Parancsok

Parancs
dotnet-trace collect
dotnet-trace collect-linux
dotnet-trace konvertálás
dotnet-trace ps
dotnet-trace list-profiles
dotnet-trace jelentés

dotnet-trace collect

Diagnosztikai nyomkövetést gyűjt egy futó folyamatból, vagy elindít egy gyermekfolyamatot, és nyomon követi azt (.NET 5 vagy újabb). Ha azt szeretné, hogy az eszköz futtasson egy gyermekfolyamatot, és nyomon kövesse azt az indításkor, fűzze hozzá -- a collect parancshoz.

Szinopszis

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>]

Beállítások

  • --buffersize <size>

    A memóriabeli puffer méretét megabájtban állítja be. Alapértelmezett 256 MB.

    Feljegyzés

    Ha a célfolyamat gyorsabban bocsát ki eseményeket, mint amennyit a lemezre írhat, a puffer túlcsordulhat, és egyes eseményeket elvethet. Ezt a problémát a puffer méretének növelésével vagy a rögzítendő események számának csökkentésével háríthatja el.

  • --clreventlevel <clreventlevel>

    A kibocsátandó CLR-események részletessége. Ez a beállítás csak akkor érvényes, ha --clrevents a beállítás meg van adva, és nem bírálja --profile felül vagy --providersfelül. Az alábbi táblázat az elérhető eseményszinteket mutatja be.

    Sztring Számérték
    logalways 0
    critical 1
    error 2
    warning 3
    informational 4
    verbose 5
  • --clrevents <clrevents>

    A CLR-futtatókörnyezet-szolgáltató kulcsszavainak listája, amelyeket jelek választanak el egymástól + . Ez egy egyszerű leképezés, amellyel sztring aliasok használatával adhat meg esemény kulcsszavakat a hexa értékek helyett. Például ugyanazt az eseménykészletet kéri le, dotnet-trace collect --providers Microsoft-Windows-DotNETRuntime:3:4 mint a dotnet-trace collect --clrevents gc+gchandle --clreventlevel informational. Ha a CLR-futtatókörnyezet-szolgáltató Microsoft-Windows-DotNETRuntime is engedélyezve --providers van, a --profilerendszer figyelmen kívül hagyja ezt a beállítást. Az alábbi táblázat az elérhető kulcsszavak listáját mutatja:

    Kulcsszósztring aliasa Kulcsszó hexa értéke
    gc 0x1
    gchandle 0x2
    assemblyloader 0x4
    loader 0x8
    jit 0x10
    ngen 0x20
    startenumeration 0x40
    endenumeration 0x80
    security 0x400
    appdomainresourcemanagement 0x800
    jittracing 0x1000
    interop 0x2000
    contention 0x4000
    exception 0x8000
    threading 0x10000
    jittedmethodiltonativemap 0x20000
    overrideandsuppressngenevents 0x40000
    type 0x80000
    gcheapdump 0x100000
    gcsampledobjectallocationhigh 0x200000
    gcheapsurvivalandmovement 0x400000
    managedheapcollect 0x800000
    gcheapandtypenames 0x1000000
    gcsampledobjectallocationlow 0x2000000
    perftrack 0x20000000
    stack 0x40000000
    threadtransfer 0x80000000
    debugger 0x100000000
    monitoring 0x200000000
    codesymbols 0x400000000
    eventsource 0x800000000
    compilation 0x1000000000
    compilationdiagnostic 0x2000000000
    methoddiagnostic 0x4000000000
    typediagnostic 0x8000000000
    jitinstrumentationdata 0x10000000000
    profiler 0x20000000000
    waithandle 0x40000000000
    allocationsampling 0x80000000000

    A CLR-szolgáltatóról részletesebben a .NET futtatókörnyezet-szolgáltató referenciadokumentációjában olvashat.

  • '--dsrouter {ios|ios-sim|android|android-emu}

    Elindítja a dotnet-dsroutert , és csatlakozik hozzá. A dotnet-dsrouter telepítéséhez szükséges. További információkért futtassa dotnet-dsrouter -h .

  • --format {Chromium|NetTrace|Speedscope}

    Beállítja a nyomkövetési fájl konvertálásának kimeneti formátumát. Az alapértelmezett érték NetTrace.

  • -n, --name <name>

    Annak a folyamatnak a neve, amelyből a nyomkövetést gyűjti.

    Feljegyzés

    Linuxon és macOS rendszeren a beállítás használatához a célalkalmazásra van szükség, és dotnet-trace ugyanazt TMPDIR a környezeti változót kell használnia. Ellenkező esetben a parancs időtúllépést fog végrehajtani.

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

    Beállítja a nyomon követendő folyamattal való kommunikációhoz használt diagnosztikai portot . A dotnet-trace-nek és a célfolyamaton belüli .NET-futtatókörnyezetnek meg kell egyeznie a portcímmel, az egyik figyeléssel, a másik pedig a csatlakozással. A dotnet-trace automatikusan meghatározza a megfelelő portot, amikor a --process-id beállításokat használja --name , vagy amikor elindít egy folyamatot a -- <command> beállítással. Általában csak akkor kell explicit módon megadni a portot, ha olyan folyamatra vár, amely a jövőben indul el, vagy egy olyan folyamat felé való kommunikációhoz, amely egy olyan tárolón belül fut, amely nem része az aktuális folyamatnévtérnek.

    Az port-address operációs rendszer különbségei:

    • Linux és macOS – a Unix-tartomány szoftvercsatornáinak elérési útja, például /foo/tool1.socket.
    • Windows – egy elnevezett cső elérési útja, például \\.\pipe\my_diag_port1.
    • Android, iOS és tvOS – ip:port, például 127.0.0.1:9000.

    Alapértelmezés szerint dotnet-trace a megadott címen figyel. Ehelyett a cím után hozzáfűzve dotnet-trace kérheti ,connect a csatlakozást. Például csatlakozik egy .NET-futtatókörnyezeti folyamathoz, --diagnostic-port /foo/tool1.socket,connect amely a Unix-tartomány szoftvercsatornát /foo/tool1.socket figyeli.

    Ha meg szeretné tudni, hogyan gyűjthet nyomkövetést az alkalmazásindításból, olvassa el a Diagnosztikai port használata az alkalmazás indítási nyomkövetésének gyűjtéséhez című témakört.

  • --duration <time-to-run>

    A nyomkövetés futtatásának ideje. Használja a dd:hh:mm:ss formátumot. Például 00:00:00:05 5 másodpercig futtatja.

  • -o|--output <trace-file-path>

    Az összegyűjtött nyomkövetési adatok kimeneti elérési útja. Ha nincs megadva, alapértelmezés szerint a következő lesz <appname>_<yyyyMMdd>_<HHmmss>.nettrace: "myapp_20210315_111514.nettrace".

  • -p|--process-id <PID>

    A nyomkövetést összegyűjtő folyamatazonosító.

    Feljegyzés

    Linuxon és macOS rendszeren a beállítás használatához a célalkalmazásra van szükség, és dotnet-trace ugyanazt TMPDIR a környezeti változót kell használnia. Ellenkező esetben a parancs időtúllépést fog végrehajtani.

  • --profile <list-of-comma-separated-profile-names>

    A profilok a gyakori nyomkövetési forgatókönyvek szolgáltatói konfigurációinak előre definiált készletei. Egyszerre több profil is megadható, vesszővel elválasztva. A profil konfigurációjának felülbírálásával --providers konfigurált szolgáltatók. Hasonlóképpen, ha bármelyik profil konfigurálja a CLR futtatókörnyezet-szolgáltatót, az felülírja a megadott --clreventskonfigurációkat.

    Amikor --profile, --providersés --clrevents az összes hiányzik, engedélyezi a profilokatdotnet-trace collect, dotnet-common és dotnet-sampled-thread-time alapértelmezés szerint.

    Elérhető profilok:

    Profil Leírás
    dotnet-common Könnyű .NET futtatókörnyezeti diagnosztikák, amelyeket úgy terveztek, hogy alacsony terhelést okoznak.
    GC, AssemblyLoader, Loader, JIT, Exceptions, Threading, JittedMethodILToNativeMap és Fordítási eseményeket tartalmaz
    Egyenértékű --providers "Microsoft-Windows-DotNETRuntime:0x100003801D:4".
    dotnet-sampled-thread-time .NET-szálvermeket (~100 Hz) használ a hotspotok időbeli azonosításához. A futtatókörnyezeti mintaprofilozót használja felügyelt veremekkel.
    gc-verbose Nyomon követi a GC-gyűjteményeket és -mintákat az objektumfoglalásokon.
    gc-collect A GC-gyűjteményeket csak nagyon alacsony terhelés mellett követi nyomon.
    database Rögzíti a ADO.NET és az Entity Framework adatbázis-parancsait.

    Feljegyzés

    A dotnet-trace eszköz korábbi verzióiban a collect verb egy úgynevezett cpu-samplingprofilt támogatott. Ez a profil azért lett eltávolítva, mert a név félrevezető volt. A processzorhasználattól függetlenül mintát vett az összes szálból. Most már hasonló eredményt érhet el a következő használatával --profile dotnet-sampled-thread-time,dotnet-common: . Ha pontosan meg kell egyeznie az előző cpu-sampling viselkedésével, használja a .--profile dotnet-sampled-thread-time --providers "Microsoft-Windows-DotNETRuntime:0x14C14FCCBD:4"

  • --providers <list-of-comma-separated-providers>

    Az engedélyezendő szolgáltatók vesszővel tagolt listája EventPipe . Ezek a szolgáltatók kiegészítik azokat a szolgáltatókat, amelyeket a --profile <list-of-comma-separated-profile-names>. Ha van inkonzisztenciája egy adott szolgáltatónak, ez a konfiguráció elsőbbséget élvez az implicit konfigurációval --profile--clreventsszemben.

    A szolgáltatók listája a következő formában Provider[,Provider]jelenik meg:

    • Provider a következő formában van: KnownProviderName[:Flags[:Level[:KeyValueArgs]]]
    • KeyValueArgs a következő formában van: [key1=value1][;key2=value2]

    Ha többet szeretne megtudni a .NET ismert szolgáltatóiról, tekintse meg a jól ismert eseményszolgáltatókat.

  • -- <command> (.NET 5 vagy újabb verziót futtató célalkalmazások esetén)

    A gyűjteménykonfigurációs paraméterek után a felhasználó hozzáfűzhet -- egy parancsot, amellyel elindíthat egy .NET-alkalmazást legalább 5.0-s futtatókörnyezettel. Ez hasznos lehet a folyamat korai szakaszában előforduló problémák diagnosztizálásakor, például az indítási teljesítménysel vagy a szerelvénybetöltő és a kötőanyag hibáival kapcsolatban.

    Feljegyzés

    Ezzel a beállítással figyeli az első .NET-folyamatot, amely visszakomlik az eszközhöz, ami azt jelenti, hogy ha a parancs több .NET-alkalmazást indít el, az csak az első alkalmazást fogja összegyűjteni. Ezért javasoljuk, hogy használja ezt a lehetőséget önálló alkalmazásokban, vagy használja a dotnet exec <app.dll> lehetőséget.

  • --show-child-io

    Egy elindított gyermekfolyamat bemeneti és kimeneti adatfolyamait jeleníti meg az aktuális konzolon.

  • --resume-runtime

    A munkamenet inicializálása után folytassa a futtatókörnyezetet, alapértelmezés szerint igaz lesz. Tiltsa le a futtatókörnyezet folytatását a --resume-runtime:false paranccsel.

  • --stopping-event-provider-name

    Egy másként értelmezett sztring, amely leállítja a nyomkövetést, amikor egy egyező szolgáltatónévvel rendelkező eseményt ér el. Egy konkrétabb leállítási eseményhez adja meg és/vagy --stopping-event-event-nameadja meg --stopping-event-payload-filter a következőt: Például --stopping-event-provider-name Microsoft-Windows-DotNETRuntime a nyomkövetés leállítása az eseményszolgáltató által Microsoft-Windows-DotNETRuntime kibocsátott első esemény lenyomásakor.

  • --stopping-event-event-name

    Egy másként értelmezett sztring, amely leállítja a nyomkövetést, amikor egy eseményt a megfelelő eseménynévvel ér el. Be --stopping-event-provider-name kell állítani. Egy konkrétabb leállítási eseményhez adja meg --stopping-event-payload-filtera . Például --stopping-event-provider-name Microsoft-Windows-DotNETRuntime --stopping-event-event-name Method/JittingStarted a nyomkövetés leállítása az eseményszolgáltató által Method/JittingStarted kibocsátott első Microsoft-Windows-DotNETRuntime esemény lenyomásakor.

  • --stopping-event-payload-filter

    Vesszővel elválasztott [payload_field_name]:[payload_field_value] párként értelmezett sztring, amely az összes megadott hasznos adatpárt tartalmazó esemény lenyomásakor leállítja a nyomkövetést. Szükség van --stopping-event-provider-name a beállításra és --stopping-event-event-name a beállításra. például --stopping-event-provider-name Microsoft-Windows-DotNETRuntime --stopping-event-event-name Method/JittingStarted --stopping-event-payload-filter MethodNameSpace:Program,MethodName:OnButtonClick az eseményszolgáltató által kibocsátott névtérben Method/JittingStarted lévő metódus OnButtonClick első Program eseményének nyomkövetésének Microsoft-Windows-DotNETRuntime leállítása.

Feljegyzés

  • A nyomkövetés leállítása hosszú időt (akár perceket) is igénybe vehet a nagy alkalmazások esetében. A futtatókörnyezetnek át kell küldenie a típusgyorsítótárat a nyomkövetésben rögzített összes felügyelt kódhoz.
  • A nyomkövetést a célfolyamatot dotnet-tracefuttató felhasználóval azonos felhasználóként vagy gyökérként kell futtatni. Ellenkező esetben az eszköz nem fog kapcsolatot létesíteni a célfolyamattal.
  • Ha futás dotnet-trace collectközben kezeletlen kivételt tapasztal, az hiányos nyomkövetést eredményez. Ha a kivétel kiváltó okának megkeresése a prioritás, keresse meg az összeomláskor található memóriaképek gyűjtését. A kezeletlen kivétel miatt a rendszer csonkolja a nyomkövetést, amikor a futtatókörnyezet leáll, hogy megakadályozza az egyéb nem kívánt viselkedést, például lefagyást vagy adatsérülést. Annak ellenére, hogy a nyomkövetés hiányos, továbbra is megnyithatja, hogy lássa, mi történt a hibához vezetően. Hiányoznak azonban a lefutási adatok (ez a nyomkövetés végén történik), így a veremek feloldatlanok lehetnek (attól függően, hogy a szolgáltatók milyen szolgáltatókat kapcsoltak be). Nyissa meg a nyomkövetést a PerfView parancssori jelölővel történő végrehajtásával /ContinueOnError . A naplók tartalmazzák a kivétel aktivált helyét is.
  • Ha a beállításokon keresztül --stopping-event-* ad meg egy leállási eseményt, mivel az EventStream aszinkron módon van elemezve, a megadott leállási esemény beállításainak megfelelő nyomkövetési esemény elemzése és az EventPipeSession leállítása között lesznek események.

dotnet-trace collect-linux

Feljegyzés

Az collect-linux ige egy új előzetes verziójú funkció, amely a .nettrace fájlformátum frissített verziójára támaszkodik. A legújabb PerfView-kiadás támogatja ezeket a nyomkövetési fájlokat, de a nyomkövetési fájl egyéb módjai, például convert és report, még nem működnek.

Diagnosztikai nyomkövetéseket gyűjt perf_events linuxos operációsrendszer-technológiával. collect-linuxlehetővé teszi a következő további funkciókat.collect

Tulajdonság collect collect-linux
Támogatott operációs rendszer Bármely Csak Linux, kernelverzió >= 6.4
Rendszergazdai/gyökérjogosítványt igényel Nem Igen
Az összes folyamat nyomon követése egyidejűleg Nem Támogatott
Natív kódtár- és kernelesemények rögzítése Nem Támogatott
Az eseményhívások natív kereteket tartalmaznak Nem Igen

Előfeltételek

  • Linux kernel támogatással CONFIG_USER_EVENTS=y (kernel 6.4+)
  • Gyökérengedélyek
  • .NET 10+

Feljegyzés

Az collect-linux ige csak a 2.35-ös vagy újabb glibc-verziójú Linux x64- és Linux Arm64-környezeteken fut. A .NET 10 hivatalos linuxos disztribúciói támogatják ezt a követelményt, kivéve az Alpine 3.22-t, a CentOS Stream 9-et és a Red Hat Enterprise Linux 9-en alapuló disztribúciókat. A rendszer libc-verziójának ellenőrzésének gyors módja a parancs ldd --version vagy a libc-kódtár közvetlen végrehajtása.

Szinopszis

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]

A gyűjtemény alapértelmezett viselkedése

Ha --providersa , --profile, --clrevents, és --perf-events nincs megadva, collect-linux alapértelmezés szerint engedélyezi ezeket a profilokat:

  • dotnet-common – egyszerűsített .NET-futtatókörnyezet-diagnosztika.
  • cpu-sampling – kernel CPU-mintavételezése.

Alapértelmezés szerint a rendszer a gépen lévő összes folyamatot nyomon követi. Ha csak egy folyamatot szeretne nyomon követni, használja -n, --name <name> vagy -p|--process-id <PID>.

Beállítások

Szolgáltatói/eseményspecifikációs beállítások

  • --providers <list-of-comma-separated-providers>

    Az engedélyezendő szolgáltatók vesszővel tagolt listája EventPipe . Ezek a szolgáltatók kiegészítik azokat a szolgáltatókat, amelyeket a --profile <list-of-comma-separated-profile-names>. Ha van inkonzisztenciája egy adott szolgáltatónak, ez a konfiguráció elsőbbséget élvez az implicit konfigurációval --profile--clreventsszemben.

    A szolgáltatók listája a következő formában Provider[,Provider]jelenik meg:

    • Provider a következő formában van: KnownProviderName[:Flags[:Level[:KeyValueArgs]]]
    • KeyValueArgs a következő formában van: [key1=value1][;key2=value2]

    A .NET néhány jól ismert szolgáltatójáról további információt a jól ismert eseményszolgáltatók című témakörben talál.

  • --clreventlevel <clreventlevel>

    A kibocsátandó CLR-események részletessége. Ez a beállítás csak akkor érvényes, ha --clrevents a beállítás meg van adva, és nem bírálja --profile felül vagy --providersfelül. Az alábbi táblázat az elérhető eseményszinteket mutatja be.

    Sztring Számérték
    logalways 0
    critical 1
    error 2
    warning 3
    informational 4
    verbose 5
  • --clrevents <clrevents>

    A CLR-futtatókörnyezet-szolgáltató kulcsszavainak listája, amelyeket jelek választanak el egymástól + . Ez egy egyszerű leképezés, amellyel sztring aliasok használatával adhat meg esemény kulcsszavakat a hexa értékek helyett. Például ugyanazt az eseménykészletet kéri le, dotnet-trace collect-linux --providers Microsoft-Windows-DotNETRuntime:3:4 mint a dotnet-trace collect-linux --clrevents gc+gchandle --clreventlevel informational. Ha a CLR-futtatókörnyezet-szolgáltató Microsoft-Windows-DotNETRuntime is engedélyezve --providers van, a --profilerendszer figyelmen kívül hagyja ezt a beállítást. Az alábbi táblázat az elérhető kulcsszavak listáját mutatja:

    Kulcsszósztring aliasa Kulcsszó hexa értéke
    gc 0x1
    gchandle 0x2
    assemblyloader 0x4
    loader 0x8
    jit 0x10
    ngen 0x20
    startenumeration 0x40
    endenumeration 0x80
    security 0x400
    appdomainresourcemanagement 0x800
    jittracing 0x1000
    interop 0x2000
    contention 0x4000
    exception 0x8000
    threading 0x10000
    jittedmethodiltonativemap 0x20000
    overrideandsuppressngenevents 0x40000
    type 0x80000
    gcheapdump 0x100000
    gcsampledobjectallocationhigh 0x200000
    gcheapsurvivalandmovement 0x400000
    managedheapcollect 0x800000
    gcheapandtypenames 0x1000000
    gcsampledobjectallocationlow 0x2000000
    perftrack 0x20000000
    stack 0x40000000
    threadtransfer 0x80000000
    debugger 0x100000000
    monitoring 0x200000000
    codesymbols 0x400000000
    eventsource 0x800000000
    compilation 0x1000000000
    compilationdiagnostic 0x2000000000
    methoddiagnostic 0x4000000000
    typediagnostic 0x8000000000
    jitinstrumentationdata 0x10000000000
    profiler 0x20000000000
    waithandle 0x40000000000
    allocationsampling 0x80000000000

    A CLR-szolgáltatóról részletesebben a .NET futtatókörnyezet-szolgáltató referenciadokumentációjában olvashat.

  • --perf-events <list-of-perf-events>

    A nyomkövetésbe belefoglalandó perf események vesszővel tagolt listája. A rendelkezésre álló események a tracefs alatt találhatók, amelyek általában az összes elérhető eseményhez, vagy a /sys/kernel/tracing kategorizált események alkönyvtárán keresztül érhetők available_eventsevents/ el.

    Példa: --perf-events syscalls:sys_enter_execve,sched:sched_switch,sched:sched_wakeup

  • --profile <list-of-comma-separated-profile-names>

    A profilok a gyakori nyomkövetési forgatókönyvek szolgáltatói konfigurációinak előre definiált készletei. Egyszerre több profil is megadható, vesszővel elválasztva. A profil konfigurációjának felülbírálásával --providers konfigurált szolgáltatók. Hasonlóképpen, ha bármelyik profil konfigurálja a CLR futtatókörnyezet-szolgáltatót, az felülírja a megadott --clreventskonfigurációkat.

    Amikor --profilea , --providers, --clrevents, és --perf-events az összes hiányzik, engedélyezi a profilokatdotnet-trace collect-linux, dotnet-common és cpu-sampling alapértelmezés szerint.

    Elérhető profilok:

    Profil Leírás
    dotnet-common Könnyű .NET futtatókörnyezeti diagnosztikák, amelyeket úgy terveztek, hogy alacsony terhelést okoznak.
    GC, AssemblyLoader, Loader, JIT, Exceptions, Threading, JittedMethodILToNativeMap és Fordítási eseményeket tartalmaz
    Egyenértékű --providers "Microsoft-Windows-DotNETRuntime:0x100003801D:4".
    cpu-sampling Kernel CPU-mintavételezés (perf-alapú), kibocsátott, mint Universal.Events/cpu, a pontos on-CPU-hozzárendelés.
    thread-time A kernelszál környezeti kapcsolói a processzoron kívüli és ütemező elemzéshez kibocsátva Universal.Events/cswitch.
    gc-verbose Nyomon követi a GC-gyűjteményeket és -mintákat az objektumfoglalásokon.
    gc-collect A GC-gyűjteményeket csak nagyon alacsony terhelés mellett követi nyomon.
    database Rögzíti a ADO.NET és az Entity Framework adatbázis-parancsait.

Nyomkövetési gyűjtemény beállításai

  • -o|--output <trace-file-path>

    Az összegyűjtött nyomkövetési adatok kimeneti elérési útja. Ha nincs megadva, akkor alapértelmezés szerint trace_<yyyyMMdd>_<HHmmss>.nettrace az alapértelmezett gépszintű nyomkövetéshez és egy folyamatspecifikus nyomkövetéshez <appname>_<yyyyMMdd>_<HHmmss>.nettrace (--name vagy --process-id)

  • --duration <time-to-run>

    A nyomkövetés futtatásának ideje. Használja a dd:hh:mm:ss formátumot. Például 00:00:00:05 5 másodpercig futtatja.

.NET-folyamat célbeállításai

A gyűjtemény alapértelmezett viselkedésének megtekintése

  • -n, --name <name>

    Annak a folyamatnak a neve, amelyből a nyomkövetést gyűjti.

  • -p|--process-id <PID>

    A nyomkövetést összegyűjtő folyamatazonosító.

Mintavételezési mód beállításai

  • --probe [-n|--name] [-p|--process-id] [-o|--output <stdout|output-filename>]

    .NET-folyamatok mintavétele a collect-linux által használt EventPipe UserEvents IPC parancs támogatásához nyomkövetés nélkül. Először a támogatott folyamatokat sorolja fel az eredmények listájában. A CSV (pid,processName, supportsCollectLinux) a konzolra való nyomtatásához használja a "-o stdout" parancsot, a CSV írásához pedig a "-o output-filename" nevet. Egyetlen folyamat mintavétele -n|-name vagy -p|--process-id azonosítóval.

    Mivel a mintavételi módban való futtatás collect-linux nem gyűjt nyomkövetést, nem igényel gyökérengedélyeket a futtatáshoz. Nem biztosítja az előfeltételek ellenőrzését, és a .NET-futtatókörnyezet (10.0.0) előzetes verzióin futó .NET-folyamatok nem támogatottak.

Feljegyzés

A nyomkövetési adatok gyűjtéséhez dotnet-trace collect-linuxgyökérengedélyekkelCAP_PERFMON/CAP_SYS_ADMIN () kell futtatni. Ellenkező esetben az eszköz nem fogja összegyűjteni az eseményeket.

dotnet-trace konvertálás

A nyomkövetéseket nettrace alternatív formátumokká alakítja át, hogy alternatív nyomkövetési elemzési eszközökkel használható legyen.

Szinopszis

dotnet-trace convert [<input-filename>] [--format <Chromium|NetTrace|Speedscope>] [-h|--help] [-o|--output <output-filename>]

Argumentumok

  • <input-filename>

    Konvertálandó bemeneti nyomkövetési fájl. A trace.nettrace alapértelmezett értéke.

Beállítások

  • --format <Chromium|NetTrace|Speedscope>

    Beállítja a nyomkövetési fájl konvertálásának kimeneti formátumát.

  • -o|--output <output-filename>

    Kimeneti fájlnév. A program hozzáadja a célformátum bővítményét.

Feljegyzés

A fájlok nettracechromium konvertálása speedscope visszafordíthatatlan. speedscope és chromium a fájlok nem rendelkeznek a fájlok rekonstruálásához nettrace szükséges összes információval. A convert parancs azonban megőrzi az eredeti nettrace fájlt, ezért ne törölje ezt a fájlt, ha a jövőben meg szeretné nyitni.

dotnet-trace ps

Felsorolja azokat a dotnet-folyamatokat, amelyekből a nyomkövetések gyűjthetők. dotnet-trace A 6.0.320703-as és újabb verziókban az egyes folyamatok által elindított parancssori argumentumok is megjelennek, ha elérhetők.

Feljegyzés

A számbavételi 64 bites folyamatok teljes körű információinak lekéréséhez az eszköz 64 bites verzióját kell használnia dotnet-trace .

Szinopszis

dotnet-trace ps [-h|--help]

Példa

Tegyük fel, hogy a paranccsal dotnet run --configuration Releaseelindít egy hosszú ideig futó alkalmazást. Egy másik ablakban futtassa a dotnet-trace ps parancsot. A megjelenő kimenet a következő. Ha elérhető, a parancssori argumentumok a 6.0.320703-as és újabb verzióban dotnet-trace jelennek meg.

> 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

Az előre összeállított nyomkövetési profilokat listázza, és leírja, hogy mely szolgáltatók és szűrők találhatók az egyes profilokban.

Szinopszis

dotnet-trace list-profiles [-h|--help]

dotnet-trace jelentés

Jelentés létrehozása stdout-ba egy korábban létrehozott nyomkövetésből.

Szinopszis

dotnet-trace report [-h|--help] <tracefile> [command]

Argumentumok

  • <tracefile>

    Az elemzett nyomkövetés fájlútvonala.

Parancsok

dotnet-trace jelentés topN

Megkeresi azokat a leggyakoribb N metódusokat, amelyek a híváscsatán voltak a leghosszabb ideig.

Szinopszis
dotnet-trace report <tracefile> topN [-n|--number <n>] [--inclusive] [-v|--verbose] [-h|--help]
Beállítások
  • -n|--number <n>

Megadja a híváshívás legfontosabb N metódusait.

  • --inclusive

A felső N metódusok kimenete a befogadó idő alapján. Ha nincs megadva, alapértelmezés szerint a kizárólagos időt használja a rendszer.

  • -v|--verbose

Adja ki az egyes metódusok paramétereit teljes egészében. Ha nincs megadva, a paraméterek csonkulnak.

Nyomkövetés összegyűjtése dotnet-trace használatával

Nyomkövetések gyűjtése a következő használatával dotnet-trace collect:

  • Kérje le a .NET Core-alkalmazás folyamatazonosítóját (PID) a nyomkövetések gyűjtéséhez.

    • Windows rendszeren használhatja például a Feladatkezelőt vagy a tasklist parancsot.
    • Linuxon például a ps parancs.
    • dotnet-trace ps
  • Futtassa az alábbi parancsot:

    dotnet-trace collect --process-id <PID>
    

    Az előző parancs a következőhöz hasonló kimenetet hoz létre:

    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.
    
  • Állítsa le a gyűjteményt az Enter billentyű lenyomásával. dotnet-trace befejezi a naplózási eseményeket a .nettrace fájlba.

Gyermekalkalmazás indítása és nyomkövetés gyűjtése az indításból dotnet-trace használatával

Néha hasznos lehet egy folyamat nyomának összegyűjtése az indításból. A .NET 5-ös vagy újabb verzióját futtató alkalmazások esetében ezt a dotnet-trace használatával teheti meg.

Ez parancssori argumentumokkal hello.exe indul elarg1, arg2 és nyomkövetést gyűjt a futtatókörnyezet indításakor:

dotnet-trace collect -- hello.exe arg1 arg2

Az előző parancs a következőhöz hasonló kimenetet hoz létre:

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...

A nyomkövetést leállíthatja a lenyomással vagy <Enter> a kulccsal<Ctrl + C>. Ha ezt teszi, az is kilép hello.exe.

Feljegyzés

A dotnet-trace használatával történő hello.exe indítás átirányítja a bemenetét/kimenetét, és alapértelmezés szerint nem fogja tudni használni a konzolon. Használja a kapcsolót a --show-child-io stdin/stdout használatához. Ha a CTRL+C vagy a SIGTERM billentyűkombinációval lép ki az eszközből, az biztonságosan befejezi az eszközt és a gyermekfolyamatot is. Ha a gyermekfolyamat az eszköz előtt kilép, az eszköz is kilép, és a nyomkövetésnek biztonságosan megtekinthetőnek kell lennie.

Nyomkövetés gyűjtése az alkalmazásindításból a diagnosztikai port használatával

A diagnosztikai port a .NET 5-ben hozzáadott futtatókörnyezeti funkció, amely lehetővé teszi a nyomkövetés indítását az alkalmazás indításakor. Ehhez dotnet-tracehasználhatja dotnet-trace collect -- <command> a fenti példákban leírt módon, vagy használhatja a --diagnostic-port lehetőséget.

Az alkalmazás gyermekfolyamatként való elindításának legegyszerűbb dotnet-trace <collect|monitor> -- <command> módja az alkalmazás indítási folyamatából való gyors nyomon követésének.

Ha azonban pontosabban szeretné szabályozni a nyomkövetés alatt álló alkalmazás élettartamát (például csak az első 10 percre figyeli az alkalmazást, és folytatja a végrehajtást), vagy ha a parancssori felület használatával kell kommunikálnia az alkalmazással, a beállítással --diagnostic-port szabályozhatja a figyelt célalkalmazást és dotnet-tracea .

  1. Az alábbi dotnet-trace parancs létrehoz egy elnevezett myport.sock diagnosztikai szoftvercsatornát, és várja meg a kapcsolatot.

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

    Hozam:

    Waiting for connection on myport.sock
    Start an application with the following environment variable: DOTNET_DiagnosticPorts=/home/user/myport.sock
    
  2. Egy külön konzolon indítsa el a célalkalmazást a kimeneti értékre DOTNET_DiagnosticPorts beállított környezeti változóvaldotnet-trace.

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

    Ennek ezután engedélyeznie dotnet-trace kell a nyomkövetés my-dotnet-appindítását:

    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.
    

    Fontos

    Az alkalmazás dotnet run indítása problémás lehet, mert a dotnet parancssori felület számos olyan gyermekfolyamatot hozhat létre, amelyek nem az Ön alkalmazásai, és amelyekhez dotnet-trace az alkalmazás előtt csatlakozhatnak, így az alkalmazást futásidőben fel kell függeszteni. Javasoljuk, hogy közvetlenül használja az alkalmazás önálló verzióját, vagy indítsa dotnet exec el az alkalmazást.

(csak Linux rendszeren) Gépszintű nyomkövetés összegyűjtése dotnet-trace használatával

Ez a példa a gép összes folyamatához rögzíti a CPU-mintákat. A .NET 10+ rendszert futtató összes folyamat tartalmaz néhány további egyszerűsített eseményt is, amelyek a GC, a JIT és a szerelvény betöltési viselkedését ismertetik.

$ 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

A több .NET-verzióval rendelkező környezetek esetében a collect-linux való futtatás segít megállapítani, hogy a .NET-folyamat képes-e a collect-linux használatával nyomon követni.

$ 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'

A dotnet-trace-ből rögzített nyomkövetés megtekintése

Windows rendszeren a .nettrace-fájlokat a Visual Studióban vagy a PerfView-ban tekintheti meg elemzés céljából.

Linuxon a nyomkövetést úgy tekintheti meg, hogy a kimeneti formátumot a következőre dotnet-tracemódosítjaspeedscope. Módosítsa a kimeneti fájlformátumot a -f|--format beállítással. Választhat ( nettrace az alapértelmezett beállítás) és a speedscope. Ez a -f speedscope beállítás dotnet-trace létrehoz egy speedscope fájlt. Speedscope fájlokat a következő helyen nyithatja meg: https://www.speedscope.app.

A nem Windows-platformokon gyűjtött nyomkövetések esetében a nyomkövetési fájlt áthelyezheti egy Windows-gépre, és megtekintheti a Visual Studióban vagy a PerfView-ban.

Feljegyzés

A .NET Core-futtatókörnyezet nyomkövetéseket hoz létre a nettrace formátumban. A nyomkövetéseket a rendszer a nyomkövetés befejezése után sebességmérővé alakítja (ha meg van adva). Mivel egyes átalakítások adatvesztést okozhatnak, az eredeti nettrace fájl megmarad a konvertált fájl mellett.

Az .rsp fájl használata a hosszú parancsok beírásának elkerülése érdekében

Elindíthat dotnet-trace egy .rsp fájlt, amely tartalmazza az átadandó argumentumokat. Ez akkor lehet hasznos, ha olyan szolgáltatókat engedélyez, amelyek hosszadalmas argumentumokat várnak, vagy ha karaktereket csíkozó rendszerhéj-környezetet használnak.

A következő szolgáltató például nehézkes lehet, ha minden nyomkövetési alkalommal beír:

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

Az előző példa emellett az argumentum részeként is szerepel " . Mivel az idézőjeleket nem minden rendszerhéj egyformán kezeli, különböző problémák léphetnek fel a különböző rendszerhéjak használatakor. A beírandó zsh parancs például eltér a következő parancstól cmd: .

Ahelyett, hogy minden alkalommal beírja ezt a szöveget, mentheti a következő szöveget egy úgynevezett myprofile.rspfájlba.

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

A mentést myprofile.rspkövetően a következő paranccsal indíthatja el dotnet-trace ezt a konfigurációt:

dotnet-trace @myprofile.rsp

Lásd még