Nástroj pro analýzu haldy (dotnet-gcdump)

Tento článek se vztahuje na: ✔️ dotnet-gcdump verze 3.1.57502 a novější verze

Instalace

Existují dva způsoby, jak stáhnout a nainstalovat dotnet-gcdump:

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

  • --version

    Zobrazí verzi dotnet-gcdump nástroje.

  • -h|--help

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

Možnosti

  • -h|--help

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

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

    Vypíš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 tento příkaz očekává cílovou aplikaci a dotnet-gcdump bude sdílet stejnou proměnnou TMPDIR prostředí. Jinak vyprší časový limit příkazu.

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

    Zobrazuje 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 .gcdump nelze 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í. .gcdump Nebo soubor neobsahuje celou haldu.

    dotnet-gcdump funguje 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-gcdump zdá se způsobit problém s nedostatkem paměti v omezeném prostředí paměti.

    dotnet-gcdump funguje 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-gcdump také 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.