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
:
dotnet globális eszköz:
A NuGet-csomag legújabb kiadási verziójának
dotnet-gcdump
telepítéséhez használja a dotnet eszköz telepítési parancsát:dotnet tool install --global dotnet-gcdump
Közvetlen letöltés:
Töltse le a platformnak megfelelő végrehajtható eszközt:
OS Platform Windows x86 | x64 | Arm | Arm64 Linux x64 | Arm | Arm64 | musl-x64 | musl-Arm64
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-gcdump
a 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 Release
elindí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.