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-gcdump verze 10.0 a novější verze
Instalace
Existují dva způsoby, jak stáhnout a nainstalovat dotnet-gcdump:
dotnet global tool (globální nástroj dotnet):
Pokud chcete nainstalovat nejnovější verzi
dotnet-gcdumpbalíčku NuGet, použijte příkaz dotnet tool install :dotnet tool install --global dotnet-gcdumpPřímé stahování:
Stáhněte spustitelný soubor nástroje, který odpovídá vaší platformě:
Operační systém Platforma Windows x86 | x64 | Arm | Arm64 Operační systém Linux x64 | Arm | Arm64 | musl-x64 | musl-Arm64
Poznámka:
Pokud chcete použít dotnet-gcdump v aplikaci x86, potřebujete odpovídající verzi nástroje x86.
Synopse
dotnet-gcdump [-h|--help] [--version] <command>
Popis
Globální dotnet-gcdump nástroj shromažďuje výpisy paměti GC (Garbage Collector) živých procesů .NET pomocí eventPipe. Výpisy paměti GC se vytvářejí aktivací GC v cílovém procesu, zapnutím zvláštních událostí a opětovném vygenerováním grafu kořenových objektů z datového proudu událostí. Tento proces umožňuje shromažďování výpisů paměti paměti, když je proces spuštěný a s minimální režií. Tyto výpisy paměti jsou užitečné pro několik scénářů:
- Porovnání počtu objektů v haldě v několika bodech v čase.
- Analýza kořenů objektů (odpovídání na otázky typu "co stále obsahuje odkaz na tento typ?").
- Shromažďování obecných statistik o počtech objektů v haldě.
Zobrazení výpisu paměti GC zachyceného z dotnet-gcdump
Ve Windows .gcdump lze soubory zobrazit v nástroji PerfView pro analýzu nebo v sadě Visual Studio. V současné době neexistuje způsob, jak otevřít na .gcdump platformách jiných než Windows.
Můžete shromáždit více .gcdumps a otevřít je současně v sadě Visual Studio, abyste získali možnosti porovnání.
Možnosti
--versionZobrazí verzi
dotnet-gcdumpnástroje.-h|--helpZobrazuje nápovědu k příkazovému řádku.
Příkazy
| Příkaz |
|---|
| dotnet-gcdump collect |
| dotnet-gcdump ps |
| dotnet-gcdump report |
dotnet-gcdump collect
Shromažďuje výpis paměti paměti z aktuálně spuštěného procesu.
Upozorňující
Pokud chcete projít haldu uvolňování paměti GC, tento příkaz aktivuje uvolňování paměti generace 2 (úplné), což může pozastavit modul runtime po dlouhou dobu, zejména v případě, že halda uvolňování paměti je velká. Tento příkaz nepoužívejte v prostředích citlivých na výkon, pokud je halda GC velká.
Synopse
dotnet-gcdump collect [-h|--help] [-p|--process-id <pid>] [-o|--output <gcdump-file-path>] [-v|--verbose] [-t|--timeout <timeout>] [-n|--name <name>] [--dsrouter <ios|ios-sim|android|android-emu>]
Možnosti
-h|--helpZobrazuje nápovědu k příkazovému řádku.
-p|--process-id <pid>ID procesu pro shromáždění výpisu paměti paměti z.
Poznámka:
V Linuxu a macOS vyžaduje použití této možnosti cílovou aplikaci a
dotnet-gcdumpsdílení stejnéTMPDIRproměnné prostředí. Jinak vyprší časový limit příkazu.-o|--output <gcdump-file-path>Cesta, kam se mají zapisovat shromážděné výpisy paměti paměti. Výchozí hodnota je .\YYYYMMDD_HHMMSS_<pid.gcdump>.
-v|--verboseVypíše protokol při shromažďování výpisu paměti paměti.
-t|--timeout <timeout>Vzdát se shromažďování výpisu paměti GC, pokud trvá déle než tento počet sekund. Výchozí hodnota je 30.
-n|--name <name>Název procesu pro shromáždění výpisu paměti paměti z.
Poznámka:
V Linuxu a macOS vyžaduje použití této možnosti cílovou aplikaci a
dotnet-gcdumpsdílení stejnéTMPDIRproměnné prostředí. Jinak vyprší časový limit příkazu.--diagnostic-port <port-address[,(listen|connect)]>Nastaví diagnostický port použitý ke komunikaci s procesem, který se má vyhodit. dotnet-gcdump a modul runtime .NET uvnitř cílového procesu musí souhlasit s adresou portu s jedním nasloucháním a druhým připojením. dotnet-gcdump automaticky určuje správný port při připojování pomocí
--process-idmožností.--namePři komunikaci s procesem spuštěným v kontejneru, který není součástí oboru názvů aktuálního procesu, je obvykle nutné zadat port explicitně.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-gcdump naslouchá na zadané adrese. Místo toho můžete požádat o připojení dotnet-gcdump připojením
,connectza adresu. Připojí se například--diagnostic-port /foo/tool1.socket,connectk procesu modulu runtime .NET, který naslouchá soketu domény unixu/foo/tool1.socket.- Linux a macOS – cesta k soketu domény Unixu, například
--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.
Poznámka:
Chcete-li shromáždit výpis paměti paměti pomocí dotnet-gcdump, 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.
dotnet-gcdump ps
Zobrazí seznam procesů dotnet, pro které lze shromažďovat výpisy paměti paměti. dotnet-gcdump 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.
Synopse
dotnet-gcdump 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-gcdump ps příkaz. Výstup, který uvidíte, je následující. Pokud existují argumenty příkazového řádku, zobrazí se ve dotnet-gcdump verzi 6.0.320703 a novější.
> dotnet-gcdump ps
21932 dotnet C:\Program Files\dotnet\dotnet.exe run --configuration Release
36656 dotnet C:\Program Files\dotnet\dotnet.exe
dotnet-gcdump report <gcdump_filename>
Vygenerujte sestavu z dříve generovaného výpisu paměti GC nebo ze spuštěného procesu a zapište do stdoutsouboru .
Synopse
dotnet-gcdump report [-h|--help] [-p|--process-id <pid>] [-t|--report-type <HeapStat>]
Možnosti
-h|--helpZobrazuje nápovědu k příkazovému řádku.
-p|--process-id <pid>ID procesu pro shromáždění výpisu paměti paměti z.
-t|--report-type <HeapStat>Typ sestavy, kterou chcete vygenerovat. Dostupné možnosti: haldy (výchozí).
Odstraňování potíží
V souboru gcdump nejsou žádné informace o typu.
Před .NET Core 3.1 došlo k problému, kdy se při vyvolání pomocí eventPipe nevymazala mezipaměť typu mezi gcdumps. Výsledkem byly události potřebné k určení informací o typu, které se neodesílají za sekundu a následné gcdumps. Tato oprava byla opravena v .NET Core 3.1-Preview2.
Com a statické typy nejsou v výpisu paměti GC.
Před .NET Core 3.1 došlo k problému, kdy se statické typy a typy MODELU COM neodesílaly při vyvolání výpisu paměti paměti přes EventPipe. Tato oprava byla opravena v .NET Core 3.1.
dotnet-gcdumpkvůli chybějícím informacím.gcdumpnelze vygenerovat soubor, například [Chyba] Výjimka během gcdump: System.ApplicationException: Soubor ETL zobrazuje začátek výpisu haldy, ale ne jeho dokončení..gcdumpNebo soubor neobsahuje celou haldu.dotnet-gcdumpfunguje tak, že shromažďuje trasování událostí vygenerovaných uvolňováním paměti během indukované kolekce generace 2. Pokud je halda dostatečně velká nebo není dostatek paměti pro škálování vyrovnávacích pamětí událostí, můžou se vynechat události potřebné k rekonstrukci grafu haldy z trasování. V takovém případě se doporučuje kvůli diagnostice problémů s haldou shromáždit výpis stavu procesu.dotnet-gcdumpzdá se způsobit problém s nedostatkem paměti v omezeném prostředí paměti.dotnet-gcdumpfunguje tak, že shromažďuje trasování událostí vygenerovaných uvolňováním paměti během indukované kolekce generace 2. Cílová aplikace vlastní vyrovnávací paměť pro kolekci událostí a může růst až 256 MB.dotnet-gcdumptaké používá paměť. Pokud je vaše prostředí omezené na paměť, nezapomeňte při shromažďování souboru gcdump zohlednit tyto faktory, aby se zabránilo chybám.