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.
EventPipe je komponenta modulu runtime, kterou lze použít ke shromažďování dat trasování, podobně jako ETW nebo perf_events. Cílem eventPipe je umožnit vývojářům platformy .NET snadné trasování aplikací .NET, aniž by museli spoléhat na komponenty s vysokou úrovní oprávnění specifické pro platformu, jako jsou ETW nebo perf_events.
EventPipe je mechanismus za mnoha diagnostickými nástroji a lze ho použít k využívání událostí generovaných modulem runtime i vlastních událostí zapsaných pomocí EventSource.
Tento článek je přehledem vysoké úrovně o EventPipe. Popisuje, kdy a jak používat EventPipe a jak ho nakonfigurovat tak, aby co nejlépe vyhovoval vašim potřebám.
Základy eventPipe
EventPipe agreguje události generované komponentami modulu runtime – například kompilátor Just-In-Time nebo garbage collector – a události zapsané z instancí EventSource v knihovnách a uživatelském kódu.
Události se pak serializují ve .nettrace formátu souboru a lze je zapsat přímo do souboru nebo streamovat přes diagnostický port pro spotřebu mimo proces.
Další informace o formátu NetTrace najdete v dokumentaci k formátu NetTrace.
Porovnání EventPipe a ETW/perf_events (nástroje pro sledování událostí)
EventPipe je součástí modulu runtime .NET a je navržený tak, aby fungoval stejným způsobem napříč všemi platformami, které podporuje .NET Core. Díky tomu mohou nástroje pro trasování založené na EventPipe, jako například dotnet-counters, dotnet-gcdump a dotnet-trace, bezproblémově fungovat na různých platformách.
Vzhledem k tomu, že EventPipe je předdefinovaná komponenta modulu runtime, je jeho obor omezen na spravovaný kód a samotný modul runtime. Bez jiných nástrojů pro trasování události EventPipe zahrnují trasování zásobníku pouze s informacemi o rámci spravovaného kódu. Pokud chcete získat události z jiných nespravovaných knihoven uživatelského režimu, vzorkování procesoru pro nativní kód nebo události jádra, použijte nástroje pro trasování specifické pro operační systém, jako je Trasování událostí pro Windows nebo perf_events. Nástroj perfcollect v Linuxu pomáhá automatizovat pomocí perf_events a LTTng.
Počínaje rozhraním .NET 10 může EventPipe v Linuxu generovat události jako user_events, což umožňuje shromažďování spravovaných událostí, událostí operačního systému nebo jádra a nativních zásobníků volání v jednom sjednocené trasování. Tento režim vyžaduje oprávnění správce nebo root a jádro Linuxu 6.4 a novější. Další informace najdete na webu dotnet-trace collect-linux.
Dalším významným rozdílem mezi EventPipe a ETW/perf_events je požadavek na oprávnění správce/root. Pokud chcete sledovat aplikaci pomocí Trasování událostí pro Windows nebo perf_events, musíte být administrátorem nebo rootem. Pomocí standardního eventPipe můžete trasovat aplikace, pokud je tracer (například dotnet-trace) spuštěný jako stejný uživatel jako uživatel, který aplikaci spustil. Režim EventPipe (user_events) popsaný dříve vyžaduje oprávnění správce nebo root oprávnění, protože interaguje s trasovací infrastrukturou na úrovni OS.
Následující tabulka obsahuje souhrn rozdílů mezi událostmi EventPipe a ETW/perf_events.
| Funkce | EventPipe | EventPipe (user_events) | Trasování událostí pro Windows | výkonové události |
|---|---|---|---|---|
| Multiplatformní | Ano | Ne (pouze u podporovaných distribucí Linuxu) | Ne (jenom ve Windows) | Ne (pouze u podporovaných distribucí Linuxu) |
| Vyžadování oprávnění správce nebo root oprávnění | Ne | Ano | Ano | Ano |
| Může získat události operačního systému nebo jádra | Ne | Ano | Ano | Ano |
| Dokáže vyřešit nativní zásobníky volání | Ne | Ano | Ano | Ano |
Trasování aplikace .NET pomocí EventPipe
EventPipe můžete použít k trasování aplikace .NET mnoha způsoby:
Použijte jeden z diagnostických nástrojů , které jsou postavené na eventPipe.
Pomocí knihovny Microsoft.Diagnostics.NETCore.Client můžete napsat vlastní nástroj ke spuštění a konfiguraci relací EventPipe.
Ke spuštění EventPipe použijte proměnné prostředí.
Po vytvoření souboru nettrace, který obsahuje události EventPipe, můžete tento soubor zobrazit v nástroji PerfView nebo v sadě Visual Studio. Na ne-Windows platformách můžete převést soubor nettrace do speedscope nebo Chromium formátu trasování pomocí příkazu dotnet-trace convert a zobrazit ho pomocí speedscope nebo Chrome DevTools.
Trasování EventPipe můžete analyzovat také programově pomocí TraceEventu.
Nástroje, které používají EventPipe
Toto je nejjednodušší způsob, jak pomocí eventPipe trasovat aplikaci. Další informace o tom, jak jednotlivé nástroje používat, najdete v dokumentaci jednotlivých nástrojů.
dotnet-counters umožňuje monitorovat a shromažďovat různé metriky generované moduly runtime .NET a základními knihovnami a také vlastní metriky, které můžete psát.
dotnet-gcdump umožňuje shromažďovat výpisy haldy paměti běžících procesů pro analýzu spravované haldy aplikace.
dotnet-trace umožňuje sbírat sledy aplikací k analýze výkonnosti.
Trasování pomocí proměnných prostředí
Upřednostňovaným mechanismem pro použití eventPipe je použití dotnet-trace nebo knihovny Microsoft.Diagnostics.NETCore.Client .
Následující proměnné prostředí ale můžete použít k nastavení relace EventPipe v aplikaci a k zápisu trasování přímo do souboru. Pokud chcete trasování zastavit, ukončete aplikaci.
DOTNET_EnableEventPipe: Nastavte1pro spuštění relace EventPipe, která zapisuje přímo do souboru. Výchozí hodnota je0.DOTNET_EventPipeOutputPath: Cesta k výstupnímu trasovacímu souboru EventPipe, když je nakonfigurovaná tak, aby běžela přesDOTNET_EnableEventPipe. Výchozí hodnota jetrace.nettrace, která se vytvoří ve stejném adresáři, ze kterého aplikace běží.Poznámka:
Od verze .NET 6 jsou instance řetězce
{pid}vDOTNET_EventPipeOutputPathnahrazeny ID sledovaného procesu.DOTNET_EventPipeCircularMB: Šestnáctková hodnota, která udává velikost interního zásobníku EventPipe v megabajtech. Tato hodnota konfigurace se používá pouze v případě, že je eventPipe nakonfigurovaný tak, aby běžel přesDOTNET_EnableEventPipe. Výchozí velikost vyrovnávací paměti je 1024 MB, která se překládá na tuto proměnnou prostředí nastavenou na400, protože0x400==1024.Poznámka:
Pokud cílový proces zapisuje události příliš často, může tato vyrovnávací paměť přetéct a některé události mohou být vynechány. Pokud se zahodí příliš mnoho událostí, zvětšete velikost vyrovnávací paměti, abyste zjistili, jestli se počet vynechaných událostí snižuje. Pokud se počet vynechaných událostí nezmenší s větší velikostí vyrovnávací paměti, může to být způsobeno pomalým čtenářem, který brání v vyprázdnění vyrovnávací paměti cílového procesu.
DOTNET_EventPipeProcNumbers: Nastavte toto na1pro povolení zachytávání čísel procesorů v hlavičkách událostí EventPipe. Výchozí hodnota je0.DOTNET_EventPipeConfig: Nastaví konfiguraci relace EventPipe při spuštění relace EventPipe sDOTNET_EnableEventPipe. Syntaxe je následující:<provider>:<keyword>:<level>Můžete také zadat více poskytovatelů tak, že je oddělíte čárkou:
<provider1>:<keyword1>:<level1>,<provider2>:<keyword2>:<level2>Pokud tato proměnná prostředí není nastavená, ale EventPipe je povoleno prostřednictvím
DOTNET_EnableEventPipe, zahájí se trasování povolením následujících poskytovatelů se zadanými klíčovými slovy a úrovněmi:Microsoft-Windows-DotNETRuntime:4c14fccbd:5Microsoft-Windows-DotNETRuntimePrivate:4002000b:5Microsoft-DotNETCore-SampleProfiler:0:5
Další informace o některých známých poskytovatelích v .NET obraťte se na Známí poskytovatelé událostí.