Hulpprogramma voor heap-analyse (dotnet-gcdump)
Dit artikel is van toepassing op: ✔️ dotnet-gcdump
versie 3.1.57502 en nieuwere versies
Installeren
Er zijn twee manieren om te downloaden en installeren dotnet-gcdump
:
dotnet global tool:
Als u de nieuwste versie van het NuGet-pakket wilt installeren, gebruikt u de installatieopdracht van het
dotnet-gcdump
dotnet-hulpprogramma:dotnet tool install --global dotnet-gcdump
Directe download:
Download het uitvoerbare hulpprogramma dat overeenkomt met uw platform:
Besturingssysteem Platform Windows x86 | x64 | Arm64 | Linux x64 | Arm64 | | musl-x64 | musl-Arm64
Notitie
Als u een x86-app wilt gebruiken dotnet-gcdump
, hebt u een bijbehorende x86-versie van het hulpprogramma nodig.
Samenvatting
dotnet-gcdump [-h|--help] [--version] <command>
Beschrijving
Het dotnet-gcdump
globale hulpprogramma verzamelt GC-dumps (Garbage Collector) van live .NET-processen met behulp van EventPipe. GC-dumps worden gemaakt door een GC in het doelproces te activeren, speciale gebeurtenissen in te schakelen en de grafiek van objecthoofdmappen van de gebeurtenisstroom opnieuw te genereren. Met dit proces kunnen GC-dumps worden verzameld terwijl het proces wordt uitgevoerd en met minimale overhead. Deze dumps zijn handig voor verschillende scenario's:
- Het aantal objecten op de heap op verschillende tijdstippen vergelijken.
- Hoofdmappen van objecten analyseren (antwoorden op vragen zoals "Wat heeft er nog steeds een verwijzing naar dit type?").
- Algemene statistieken verzamelen over het aantal objecten op de heap.
De GC-dump weergeven die is vastgelegd vanuit dotnet-gcdump
In Windows .gcdump
kunnen bestanden worden weergegeven in PerfView voor analyse of in Visual Studio. Op dit moment is er geen manier om een .gcdump
niet-Windows-platform te openen.
U kunt meerdere .gcdump
s verzamelen en deze tegelijk openen in Visual Studio om een vergelijkingservaring te krijgen.
Opties
--version
Geeft de versie van het
dotnet-gcdump
hulpprogramma weer.-h|--help
Toont opdrachtregelhulp.
Opdracht
Opdracht |
---|
dotnet-gcdump collect |
dotnet-gcdump ps |
dotnet-gcdump-rapport |
dotnet-gcdump collect
Verzamelt een GC-dump van een momenteel uitgevoerd proces.
Waarschuwing
Als u de GC-heap wilt doorlopen, activeert deze opdracht een garbagecollection van de tweede (volledige) generatie, die de runtime lange tijd kan onderbreken, vooral wanneer de GC-heap groot is. Gebruik deze opdracht niet in prestatiegevoelige omgevingen wanneer de GC-heap groot is.
Samenvatting
dotnet-gcdump collect [-h|--help] [-p|--process-id <pid>] [-o|--output <gcdump-file-path>] [-v|--verbose] [-t|--timeout <timeout>] [-n|--name <name>]
Opties
-h|--help
Toont opdrachtregelhulp.
-p|--process-id <pid>
De proces-id waaruit de GC-dump moet worden verzameld.
-o|--output <gcdump-file-path>
Het pad waar verzamelde GC-dumps moeten worden geschreven. Standaard ingesteld op .\YYYYMMDD_HHMMSS_<pid.gcdump>.
-v|--verbose
Voer het logboek uit tijdens het verzamelen van de GC-dump.
-t|--timeout <timeout>
Geef het verzamelen van de GC-dump op als het langer duurt dan dit aantal seconden. De standaardwaarde is 30.
-n|--name <name>
De naam van het proces waaruit de GC-dump moet worden verzameld.
Notitie
In Linux en macOS verwacht deze opdracht de doeltoepassing en dotnet-gcdump
deelt deze dezelfde TMPDIR
omgevingsvariabele. Anders treedt er een time-out op voor de opdracht.
Notitie
Als u een GC-dump wilt verzamelen met behulp van dotnet-gcdump
, moet deze worden uitgevoerd als dezelfde gebruiker als het doelproces van de gebruiker of als root. Anders kan het hulpprogramma geen verbinding maken met het doelproces.
dotnet-gcdump ps
Een lijst met de dotnet-processen waarvoor GC-dumps kunnen worden verzameld. dotnet-gcdump 6.0.320703 en hoger, geeft ook de opdrachtregelargumenten weer waarmee elk proces is gestart, indien beschikbaar.
Samenvatting
dotnet-gcdump ps [-h|--help]
Opmerking
Stel dat u een langlopende app start met behulp van de opdracht dotnet run --configuration Release
. In een ander venster voert u de dotnet-gcdump ps
opdracht uit. De uitvoer die u ziet, is als volgt. De opdrachtregelargumenten, indien aanwezig, worden weergegeven met dotnet-gcdump
versie 6.0.320703 en hoger.
> 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>
Genereer een rapport op basis van een eerder gegenereerde GC-dump of een actief proces en schrijf naar stdout
.
Samenvatting
dotnet-gcdump report [-h|--help] [-p|--process-id <pid>] [-t|--report-type <HeapStat>]
Opties
-h|--help
Toont opdrachtregelhulp.
-p|--process-id <pid>
De proces-id waaruit de GC-dump moet worden verzameld.
-t|--report-type <HeapStat>
Het type rapport dat moet worden gegenereerd. Beschikbare opties: heapstat (standaard).
Problemen oplossen
Er is geen typegegevens in de gcdump.
Vóór .NET Core 3.1 was er een probleem waarbij een typecache niet werd gewist tussen gcdumps toen ze werden aangeroepen met EventPipe. Dit heeft geresulteerd in de gebeurtenissen die nodig zijn voor het bepalen van typegegevens die niet worden verzonden voor de tweede en volgende gcdumps. Dit is opgelost in .NET Core 3.1-preview2.
COM- en statische typen staan niet in de GC-dump.
Vóór .NET Core 3.1 is er een probleem opgetreden waarbij statische en COM-typen niet werden verzonden toen de GC-dump werd aangeroepen via EventPipe. Dit is opgelost in .NET Core 3.1.
dotnet-gcdump
kan geen.gcdump
bestand genereren vanwege ontbrekende informatie, bijvoorbeeld [Fout] Uitzondering tijdens gcdump: System.ApplicationException: ETL-bestand toont het begin van een heapdump, maar niet de voltooiing ervan. Of het.gcdump
bestand bevat niet de hele heap.dotnet-gcdump
werkt door het verzamelen van een tracering van gebeurtenissen die door de garbagecollector worden verzonden tijdens een geïnduceerde verzameling van generatie 2. Als de heap voldoende groot is of er onvoldoende geheugen is om de gebeurtenisbuffers te schalen, kunnen de gebeurtenissen die nodig zijn om de heapgrafiek van de tracering te reconstrueren, worden verwijderd. In dit geval wordt het aanbevolen om een dump van het proces te verzamelen om problemen met de heap vast te stellen.dotnet-gcdump
lijkt een probleem met onvoldoende geheugen te veroorzaken in een omgeving met geheugenbeperkingen.dotnet-gcdump
werkt door het verzamelen van een tracering van gebeurtenissen die door de garbagecollector worden verzonden tijdens een geïnduceerde verzameling van generatie 2. De buffer voor gebeurtenisverzameling is eigendom van de doeltoepassing en kan oplopen tot 256 MB.dotnet-gcdump
zelf maakt ook gebruik van geheugen. Als uw omgeving geheugenbeperking heeft, moet u rekening houden met deze factoren bij het verzamelen van een gcdump om fouten te voorkomen.