Heapanalysverktyg (dotnet-gcdump)
Den här artikeln gäller för: ✔️ dotnet-gcdump
version 3.1.57502 och senare versioner
Installera
Det finns två sätt att ladda ned och installera dotnet-gcdump
:
dotnet global tool:
Om du vill installera den senaste versionen av
dotnet-gcdump
NuGet-paketet använder du installationskommandot för dotnet-verktyget:dotnet tool install --global dotnet-gcdump
Direkt nedladdning:
Ladda ned det körbara verktyget som matchar din plattform:
OS Plattform Windows x86 | x64 | Arm | Arm64 Linux x64 | Arm | Arm64 | musl-x64 | musl-Arm64
Kommentar
Om du vill använda dotnet-gcdump
en x86-app behöver du en motsvarande x86-version av verktyget.
Sammanfattning
dotnet-gcdump [-h|--help] [--version] <command>
beskrivning
Det dotnet-gcdump
globala verktyget samlar in GC-dumpar (Skräpinsamlare) av live.NET-processer med EventPipe. GC-dumpar skapas genom att utlösa en GC i målprocessen, aktivera särskilda händelser och återskapa grafen med objektrötter från händelseströmmen. Den här processen gör att GC-dumpar kan samlas in medan processen körs och med minimala omkostnader. Dessa dumpar är användbara i flera scenarier:
- Jämföra antalet objekt på heapen vid flera tidpunkter.
- Analysera objektens rötter (besvara frågor som "vad har fortfarande en referens till den här typen?").
- Samla in allmän statistik om antalet objekt på högen.
Visa GC-dumpen som hämtats från dotnet-gcdump
I Windows .gcdump
kan filer visas i PerfView för analys eller i Visual Studio. För närvarande finns det inget sätt att öppna en .gcdump
på andra plattformar än Windows.
Du kan samla in flera .gcdump
s och öppna dem samtidigt i Visual Studio för att få en jämförelseupplevelse.
Alternativ
--version
Visar versionen av
dotnet-gcdump
verktyget.-h|--help
Visar kommandoradshjälp.
Kommandon
Command |
---|
dotnet-gcdump samla |
dotnet-gcdump ps |
dotnet-gcdump-rapport |
dotnet-gcdump collect
Samlar in en GC-dump från en process som körs.
Varning
För att gå vidare med GC-heapen utlöser det här kommandot en generering 2 (fullständig) skräpinsamling, som kan pausa körningen under en lång tid, särskilt när GC-heapen är stor. Använd inte det här kommandot i prestandakänsliga miljöer när GC-heapen är stor.
Sammanfattning
dotnet-gcdump collect [-h|--help] [-p|--process-id <pid>] [-o|--output <gcdump-file-path>] [-v|--verbose] [-t|--timeout <timeout>] [-n|--name <name>]
Alternativ
-h|--help
Visar kommandoradshjälp.
-p|--process-id <pid>
Process-ID:t som GC-dumpen ska hämtas från.
-o|--output <gcdump-file-path>
Sökvägen där insamlade GC-dumpar ska skrivas. Standardvärdet är .\YYYYMMDD_HHMMSS_<pid.gcdump>.
-v|--verbose
Mata ut loggen när du samlar in GC-dumpen.
-t|--timeout <timeout>
Ge upp insamlingen av GC-dumpen om det tar längre tid än så här många sekunder. Standardvärdet är 30.
-n|--name <name>
Namnet på den process som GC-dumpen ska samlas in från.
Kommentar
I Linux och macOS förväntar sig det här kommandot målprogrammet och dotnet-gcdump
delar samma TMPDIR
miljövariabel. Annars överskrider kommandot tidsgränsen.
Kommentar
Om du vill samla in en GC-dump med måste dotnet-gcdump
den köras som samma användare som användaren som kör målprocessen eller som rot. Annars kan verktyget inte upprätta en anslutning till målprocessen.
dotnet-gcdump ps
Visar en lista över de dotnet-processer som GC-dumpar kan samlas in för. dotnet-gcdump 6.0.320703 och senare visar även de kommandoradsargument som varje process startades med, om den är tillgänglig.
Sammanfattning
dotnet-gcdump ps [-h|--help]
Exempel
Anta att du startar en tidskrävande app med kommandot dotnet run --configuration Release
. I ett annat fönster kör dotnet-gcdump ps
du kommandot . Utdata visas på följande sätt. Eventuella kommandoradsargument visas med version dotnet-gcdump
6.0.320703 och senare.
> 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>
Generera en rapport från en tidigare genererad GC-dump eller från en process som körs och skriv till stdout
.
Sammanfattning
dotnet-gcdump report [-h|--help] [-p|--process-id <pid>] [-t|--report-type <HeapStat>]
Alternativ
-h|--help
Visar kommandoradshjälp.
-p|--process-id <pid>
Process-ID:t som GC-dumpen ska hämtas från.
-t|--report-type <HeapStat>
Vilken typ av rapport som ska genereras. Tillgängliga alternativ: heapstat (standard).
Felsöka
Det finns ingen typinformation i gcdump.
Före .NET Core 3.1 uppstod ett problem där en typcache inte rensades mellan gcdumps när de anropades med EventPipe. Detta resulterade i de händelser som behövs för att fastställa typinformation som inte skickas för den andra och efterföljande gcdumps. Detta har åtgärdats i .NET Core 3.1-preview2.
COM- och statiska typer finns inte i GC-dumpen.
Före .NET Core 3.1 uppstod ett problem där statiska typer och COM-typer inte skickades när GC-dumpen anropades via EventPipe. Detta har åtgärdats i .NET Core 3.1.
dotnet-gcdump
kan inte generera en.gcdump
fil på grund av information som saknas, till exempel [Fel] Undantag under gcdump: System.ApplicationException: ETL-filen visar början på en heapdump men inte dess slutförande.. Eller så.gcdump
innehåller filen inte hela heapen.dotnet-gcdump
fungerar genom att samla in en spårning av händelser som genereras av skräpinsamlaren under en inducerad generation 2-samling. Om heapen är tillräckligt stor, eller om det inte finns tillräckligt med minne för att skala händelsebuffertarna, kan de händelser som krävs för att rekonstruera heap-grafen från spårningen tas bort. I det här fallet rekommenderar vi att du samlar in en dump av processen för att diagnostisera problem med heapen.dotnet-gcdump
verkar orsaka ett problem med slut på minne i en minnesbegränsad miljö.dotnet-gcdump
fungerar genom att samla in en spårning av händelser som genereras av skräpinsamlaren under en inducerad generation 2-samling. Bufferten för händelseinsamling ägs av målprogrammet och kan växa upp till 256 MB.dotnet-gcdump
använder också minne. Om din miljö är minnesbegränsad måste du ta hänsyn till dessa faktorer när du samlar in en gcdump för att förhindra fel.