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:

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

Opdrachten

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