Megosztás a következőn keresztül:


Halomelemző eszköz (dotnet-gcdump)

Ez a cikk a ✔️ dotnet-gcdump 3.1.57502-es és újabb verziókra vonatkozik

Telepítés

Kétféleképpen tölthető le és telepíthető dotnet-gcdump:

Feljegyzés

dotnet-gcdump X86-alkalmazásokhoz az eszköz megfelelő x86-os verziójára van szükség.

Szinopszis

dotnet-gcdump [-h|--help] [--version] <command>

Leírás

A dotnet-gcdump globális eszköz az EventPipe használatával összegyűjti az élő .NET-folyamatok GC (Garbage Collector) memóriaképeit. A GC-memóriaképek úgy jönnek létre, hogy elindítanak egy GC-t a célfolyamatban, bekapcsolják a speciális eseményeket, és újragenerálják az objektumgyökerek gráfját az eseménystreamből. Ez a folyamat lehetővé teszi a GC-memóriaképek gyűjtését, miközben a folyamat fut, és minimális többletterheléssel jár. Ezek a memóriaképek több forgatókönyv esetén is hasznosak:

  • A halom több pontján lévő objektumok számának összehasonlítása.
  • Objektumok gyökerének elemzése (olyan kérdések megválaszolása, mint például: "mi még mindig hivatkozik erre a típusra?").
  • A halom objektumainak számával kapcsolatos általános statisztikák gyűjtése.

A dotnet-gcdumpról rögzített GC-memóriakép megtekintése

Windows rendszeren a .gcdump fájlok megtekinthetők a PerfView-ban elemzés céljából vagy a Visual Studióban. Jelenleg nem lehet megnyitni egy .gcdump nem Windows rendszerű platformot.

Több s összegyűjtése .gcdumpés egyidejű megnyitása a Visual Studióban az összehasonlítási élmény érdekében.

Beállítások

  • --version

    Megjeleníti a segédprogram verzióját dotnet-gcdump .

  • -h|--help

    Parancssori súgót jelenít meg.

Parancsok

Parancs
dotnet-gcdump collect
dotnet-gcdump ps
dotnet-gcdump jelentés

dotnet-gcdump collect

GC-memóriaképet gyűjt egy jelenleg futó folyamatból.

Figyelmeztetés

A GC-halom sétáltatásához ez a parancs elindít egy 2. generációs (teljes) szemétgyűjtést, amely hosszú ideig felfüggesztheti a futtatókörnyezetet, különösen akkor, ha a GC-halom nagy. Ne használja ezt a parancsot teljesítményérzékeny környezetekben, ha a GC-halom nagy.

Szinopszis

dotnet-gcdump collect [-h|--help] [-p|--process-id <pid>] [-o|--output <gcdump-file-path>] [-v|--verbose] [-t|--timeout <timeout>] [-n|--name <name>]

Beállítások

  • -h|--help

    Parancssori súgót jelenít meg.

  • -p|--process-id <pid>

    A GC-memóriakép gyűjtésének folyamatazonosítója.

  • -o|--output <gcdump-file-path>

    Az az elérési út, ahol az összegyűjtött GC-memóriaképeket meg kell írni. Alapértelmezett érték: .\YYYYMMDD_HHMMSS_<pid.gcdump>.

  • -v|--verbose

    A GC-memóriakép összegyűjtése közben adja ki a naplót.

  • -t|--timeout <timeout>

    Ha ennyi másodpercnél tovább tart, adja fel a GC-memóriakép gyűjtését. Az alapértelmezett érték 30.

  • -n|--name <name>

    A GC-memóriakép gyűjtésére vonatkozó folyamat neve.

Feljegyzés

Linux és macOS rendszeren ez a parancs elvárja a célalkalmazást, és dotnet-gcdump ugyanazt TMPDIR a környezeti változót használja. Ellenkező esetben a parancs időtúllépést fog végrehajtani.

Feljegyzés

A GC-memóriaképek gyűjtéséhez dotnet-gcdumpa célfolyamatot futtató felhasználóval azonos felhasználóként vagy gyökérként kell futtatni. Ellenkező esetben az eszköz nem fog kapcsolatot létesíteni a célfolyamattal.

dotnet-gcdump ps

Felsorolja azokat a dotnet-folyamatokat, amelyekhez a GC-memóriaképek gyűjthetők. a dotnet-gcdump 6.0.320703-as és újabb verziói is megjelenítik azokat a parancssori argumentumokat, amelyekkel az egyes folyamatok elindultak, ha elérhetők.

Szinopszis

dotnet-gcdump ps [-h|--help]

Példa

Tegyük fel, hogy a paranccsal dotnet run --configuration Releaseelindít egy hosszú ideig futó alkalmazást. Egy másik ablakban futtassa a dotnet-gcdump ps parancsot. A megjelenő kimenet a következő. Ha vannak ilyenek, a parancssori argumentumok a 6.0.320703-as és újabb verzióval dotnet-gcdump jelennek meg.

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

Hozzon létre egy jelentést egy korábban létrehozott GC-memóriaképből vagy egy futó folyamatból, és írjon ide stdout.

Szinopszis

dotnet-gcdump report [-h|--help] [-p|--process-id <pid>] [-t|--report-type <HeapStat>]

Beállítások

  • -h|--help

    Parancssori súgót jelenít meg.

  • -p|--process-id <pid>

    A GC-memóriakép gyűjtésének folyamatazonosítója.

  • -t|--report-type <HeapStat>

    A létrehozandó jelentés típusa. Elérhető lehetőségek: heapstat (alapértelmezett).

Hibaelhárítás

  • A gcdump nem tartalmaz típusadatokat.

    A .NET Core 3.1-es kiadása előtt hiba történt, amely miatt a rendszer nem törölte a típusgyorsítótárat a gcdumpsok között az EventPipe-lel való meghíváskor. Ez azt eredményezte, hogy a típusadatok meghatározásához szükséges eseményeket nem küldték el a második és az azt követő gcdumpshoz. Ezt kijavítottuk a .NET Core 3.1-preview2-ben.

  • A COM és a statikus típusok nem szerepelnek a GC-memóriaképben.

    A .NET Core 3.1-et megelőzően olyan probléma lépett fel, amely miatt a rendszer nem küldött statikus és COM-típusokat, amikor a GC-memóriaképet az EventPipe-en keresztül hívták meg. Ezt kijavítottuk a .NET Core 3.1-ben.

  • dotnet-gcdump nem tud fájlt létrehozni .gcdump hiányzó információk miatt, például :[Error] Kivétel a gcdump során: System.ApplicationException: Az ETL-fájl egy halomkép kezdetét jeleníti meg, de a befejezést nem.. Vagy a .gcdump fájl nem tartalmazza a teljes halomot.

    dotnet-gcdump úgy működik, hogy összegyűjti a szemétgyűjtő által a 2. generációs begyűjtés során kibocsátott események nyomait. Ha a halom elég nagy, vagy nincs elegendő memória az eseménypufferek skálázásához, akkor a nyomkövetési halomdiagram rekonstruálásához szükséges események elvethetők. Ebben az esetben a halom problémáinak diagnosztizálásához ajánlott összegyűjteni a folyamat memóriaképét.

  • dotnet-gcdump úgy tűnik, hogy memóriakorlátozott környezetben memóriakihasználtságot okoz.

    dotnet-gcdump úgy működik, hogy összegyűjti a szemétgyűjtő által a 2. generációs begyűjtés során kibocsátott események nyomait. Az eseménygyűjtemény puffere a célalkalmazás tulajdonában van, és akár 256 MB-ra is nőhet. dotnet-gcdump memóriát is használ. Ha a környezet memóriakorlátozott, a hibák elkerülése érdekében mindenképpen vegye figyelembe ezeket a tényezőket a gcdump gyűjtésekor.