Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
Tento článek se vztahuje na: ✔️ dotnet-dump verze 3.0.47001 a novější verze
Poznámka:
dotnet-dump pro macOS se podporuje jenom s .NET 5 a novějšími verzemi.
Instalace
Existují dva způsoby, jak stáhnout a nainstalovat dotnet-dump:
dotnet global tool (globální nástroj dotnet):
Pokud chcete nainstalovat nejnovější vydání balíčku NuGet
, použijte příkaz dotnet tool install .dotnet tool install --global dotnet-dumpPřímé stahování:
Stáhněte spustitelný soubor nástroje, který odpovídá vaší platformě:
Operační systém Platforma Windows x86 | x64 | Arm | arm-x64 Operační systém Linux x64 | Arm | Arm64 | musl-x64 | musl-Arm64
Poznámka:
Pokud chcete použít dotnet-dump v aplikaci x86, potřebujete odpovídající verzi nástroje x86.
Synopse
dotnet-dump [-h|--help] [--version] <command>
Popis
Globální nástroj dotnet-dump představuje způsob, jak shromažďovat a analyzovat výpisy paměti v systému Windows, Linuxu a macOS bez zapojení nativního ladicího programu. Tento nástroj je důležitý na platformách, jako je Alpine Linux, kde není k dispozici plně funkční lldb . Nástroj dotnet-dump umožňuje spouštět příkazy SOS pro analýzu chybových ukončení a uvolňování paměti (GC), ale nejedná se o nativní ladicí program, takže se nepodporují věci, jako je zobrazení nativních rámců zásobníku.
Možnosti
--versionZobrazí verzi nástroje dotnet-dump.
-h|--helpZobrazuje nápovědu k příkazovému řádku.
Příkazy
| Příkaz |
|---|
| dotnet-dump collect |
| dotnet-dump analýza |
| dotnet-dump ps |
dotnet-dump collect
Zachytí výpis z procesu.
Synopse
dotnet-dump collect [-h|--help] [-p|--process-id] [-n|--name] [--type] [-o|--output] [--diag] [--crashreport]
Možnosti
-h|--helpZobrazuje nápovědu k příkazovému řádku.
-p|--process-id <PID>Určuje číslo ID procesu, ze které se má shromáždit výpis paměti.
-n|--name <name>Určuje název procesu, ze které se má shromáždit výpis paměti.
--type <Full|Heap|Mini>Určuje typ výpisu paměti, který určuje typy informací shromážděných z procesu. Existují tři typy:
-
Full- Největší výpis paměti obsahující veškerou paměť včetně imagí modulů. -
Heap- Velký a relativně komplexní výpis obsahující seznamy modulů, seznamy vláken, všechny zásobníky, informace o výjimce, zpracování informací a veškerou paměť s výjimkou mapovaných obrázků. -
Mini– Malý výpis paměti obsahující seznamy modulů, seznamy vláken, informace o výjimce a všechny zásobníky. -
Triage– Malý výpis paměti obsahující seznamy modulů, seznamy vláken, informace o výjimce, všechny zásobníky a odstraněné PII.
Pokud není zadáno,
Fullje výchozí hodnota.-
-o|--output <output_dump_path>Úplná cesta a název souboru, do kterého se má zapsat shromážděný výpis. Ujistěte se, že uživatel, pod kterým je spuštěný proces dotnet, má oprávnění k zápisu do zadaného adresáře.
Pokud není zadáno:
- Výchozí hodnota je .\dump_YYYYMMDD_HHMMSS.dmp na Windows.
- Výchozí hodnota je ./core_YYYYMMDD_HHMMSS v Linuxu a macOS.
YYYYMMDD is Year/Month/Day a HHMMSS is Hour/Minute/Second.
--diagPovolí protokolování diagnostiky shromažďování výpisů paměti.
--crashreportPovolí generování zpráv o chybách.
Poznámka:
V Linuxu a macOS tento příkaz očekává cílovou aplikaci a dotnet-dump bude sdílet stejnou proměnnou TMPDIR prostředí. Jinak vyprší časový limit příkazu.
Poznámka:
Pokud chcete shromáždit výpis paměti pomocí dotnet-dump, musí být spuštěný jako stejný uživatel jako uživatel, který spouští cílový proces nebo jako kořen. Jinak se nástroj nepodaří navázat spojení s cílovým procesem.
Poznámka:
Shromažďování plného výpisu paměti nebo výpisu haldy může způsobit, že operační systém bude mít pro cílový proces značnou virtuální paměť. Pokud cílový proces běží v kontejneru s vynuceným limitem paměti, může zvýšené využití paměti způsobit ukončení kontejneru v případě překročení limitu operačního systému. Doporučujeme otestovat, abyste zajistili, že je limit paměti dostatečně vysoký. Další možností je dočasné změny nebo odebrání limitu před shromažďováním výpisů paměti, pokud to vaše prostředí podporuje.
dotnet-dump analýza
Spustí interaktivní prostředí pro prozkoumání výpisu paměti. Prostředí přijímá různé příkazy SOS.
Synopse
dotnet-dump analyze <dump_path> [-h|--help] [-c|--command]
Argumenty
<dump_path>Určuje cestu k souboru s výpisem paměti, který se má analyzovat.
Možnosti
-c|--command <debug_command>Spustí příkaz při spuštění. Více instancí tohoto parametru lze použít při vyvolání ke zřetězování příkazů. Příkazy se spustí v pořadí, v jakém jsou zadané na příkazovém řádku. Pokud chcete po příkazech ukončit výpis paměti dotnet, měl by být poslední příkaz "exit".
Analýza příkazů SOS
| Příkaz | Funkce |
|---|---|
analyzeoom |
Zobrazí informace o posledním objektu OOM, ke kterému došlo v žádosti o přidělení haldy GC. |
clrmodules |
Zobrazí seznam spravovaných modulů v procesu. |
clrstack |
Poskytne trasování zásobníku pouze pro spravovaný kód. |
clrthreads |
Zobrazí seznam spravovaných vláken, která jsou spuštěná. |
clru |
Zobrazí anotovaný překlad spravované metody. |
d nebo readmemory |
Vypíše obsah paměti. |
dbgout |
Povolí nebo zakáže (-off) interní protokolování SOS. |
dso |
Zobrazí všechny spravované objekty nalezené v rámci aktuálního zásobníku. |
dumpalc |
Zobrazí podrobnosti o collectible AssemblyLoadContext, do kterého je zadaný objekt načten. |
dumparray |
Zobrazí podrobnosti o spravovaném poli. |
dumpasync |
Zobrazí informace o asynchronních stavových počítačích na haldě s uvolňováním paměti. |
dumpassembly |
Zobrazí podrobnosti o sestavení. |
dumpclass |
Zobrazí informace o struktuře EEClass na zadané adrese. |
dumpconcurrentdictionary |
Zobrazí souběžný obsah slovníku. |
dumpconcurrentqueue |
Zobrazí souběžný obsah fronty. |
dumpdelegate |
Zobrazí informace o delegátu. |
dumpdomain |
Zobrazí informace o všech sestaveních ve všech doménách AppDomains nebo zadaném sestavení. |
dumpgcdata |
Zobrazí informace o datech GC. |
dumpgen |
Zobrazí obsah haldy pro zadanou generaci. |
dumpheap |
Zobrazí informace o statistikách haldy a shromažďování paměti o objektech. |
dumpil |
Zobrazí běžný zprostředkující jazyk (CIL), který je přidružený ke spravované metodě. |
dumplog |
Zapíše obsah zátěžového protokolu uloženého v paměti do zadaného souboru. |
dumpmd |
Zobrazí informace o struktuře MethodDesc na zadané adrese. |
dumpmodule |
Zobrazí informace o modulu na zadané adrese. |
dumpmt |
Zobrazí informace o tabulce metod na zadané adrese. |
dumpobj |
Zobrazí informace o objektu na zadané adrese. |
dumpruntimetypes |
Vyhledá všechny objekty System.RuntimeType v haldě GC a vytiskne také název typu a MethodTable, které odkazují. |
dumpsig |
Vypisuje podpis metody nebo pole určeného parametrem <sigaddr> <moduleaddr>. |
dumpsigelem |
Vypisuje jeden prvek objektu podpisu. |
dumpstackobjects |
Zobrazí všechny spravované objekty nalezené v rámci aktuálního zásobníku. |
dumpvc |
Zobrazí informace o polích třídy hodnot. |
eeheap |
Zobrazí informace o paměti procesu spotřebované interními datovými strukturami modulu runtime. |
eestack |
Spouští dumpstack se na všech vláknech v procesu. |
eeversion |
Zobrazí informace o modulech runtime a verzích SOS. |
ehinfo |
Zobrazí bloky zpracování výjimek v metodě jit-ed. |
exit nebo quit |
Ukončí interaktivní režim. |
finalizequeue |
Zobrazí všechny objekty, které jsou registrovány pro dokončení. |
findappdomain |
Pokusí se přeložit AppDomain objektu GC. |
gchandles |
Zobrazí statistické údaje o popisovačích systému uvolňování paměti v procesu. |
gcheapstat |
Zobrazí statistiku o uvolňování paměti. |
gcinfo |
Zobrazí kódování GC JIT pro metodu. |
gcroot |
Zobrazí informace o odkazech (nebo kořenech) objektu na zadané adrese. |
gcwhere |
Zobrazí umístění v haldě GC zadané adresy. |
histclear |
Uvolní všechny prostředky používané rodinou příkazů Hist. |
histinit |
Inicializuje struktury SOS ze zátěžového protokolu uloženého v laděné položce. |
histobj |
Zkontroluje všechny záznamy přemístění zátěžového protokolu a zobrazí řetězec přemísťování uvolňování paměti, který může vést na adresu předanou jako argument. |
histobjfind |
Zobrazí všechny položky protokolu, které odkazují na objekt na zadané adrese. |
histroot |
Zobrazí informace týkající se propagace a přemístění zadaného kořenu. |
histstats |
Zobrazí statistiky protokolu napětí. |
ip2md |
MethodDesc Zobrazí strukturu na zadané adrese v kódu, který byl zkompilován JIT. |
listnearobj |
Zobrazí objekt, který předchází zadané adrese a bude úspěšný. |
logopen |
Povolí protokolování souborů konzoly. |
logclose |
Zakáže protokolování souborů konzoly. |
logging |
Povolí nebo zakáže interní protokolování SOS. |
lm nebo modules |
Zobrazí nativní moduly v procesu. |
name2ee |
MethodTable Zobrazí a EEClass struktury pro zadaný typ nebo metodu v zadaném modulu. |
objsize |
Zobrazí velikost zadaného objektu. |
parallelstacks |
Zobrazí zásobník sloučených vláken podobně jako na panelu Visual Studio Paralelní zásobníky. |
pathto |
Zobrazí cestu GC od <root> do <target>. |
pe nebo printexception |
Zobrazí a formátuje pole libovolného objektu Exception odvozeného z třídy na zadané adrese. |
r nebo registers |
Zobrazí registry vlákna. |
runtimes |
Zobrazí seznam modulů runtime v cíli nebo změní výchozí modul runtime. |
setclrpath |
Nastaví cestu pro načtení souborů dac/dbi coreclr pomocí setclrpath <path>. |
setsymbolserver |
Povolí podporu serveru symbolů. |
sos |
Spustí různé příkazy ladění coreclr. Použijte syntaxi sos <command-name> <args>. Další informace najdete v tématu "soshelp". |
soshelp nebo help |
Zobrazí všechny dostupné příkazy. |
soshelp <command> nebo help <command> |
Zobrazí zadaný příkaz. |
syncblk |
Zobrazí informace o držiteli syncblocku. |
taskstate |
Zobrazí stav úkolu v čitelném formátu člověka. |
threadpool |
Zobrazí informace o fondu vláken modulu runtime. |
threadpoolqueue |
Zobrazí pracovní položky fondu vláken ve frontě. |
threadstate |
Docela vytiskne význam stavu vláken. |
threads <threadid> nebo setthread <threadid> |
Nastaví nebo zobrazí aktuální ID vlákna pro příkazy SOS. |
timerinfo |
Zobrazí informace o spuštěných časovačích. |
token2ee |
Zobrazí strukturu MethodTable a strukturu MethodDesc pro zadaný token a modul. |
traverseheap |
Zapíše informace haldy do souboru ve formátu, kterému rozumí profiler CLR. |
verifyheap |
Zkontroluje známky poškození haldy GC. |
verifyobj |
Zkontroluje, zda objekt, který je předán jako argument, jeví známky poškození. |
Poznámka:
Další podrobnosti najdete v rozšíření ladění SOS pro .NET.
dotnet-dump ps
Uvádí seznam procesů dotnet, ze které lze shromažďovat výpisy paměti.
dotnet-dump Verze 6.0.320703 a novější verze také zobrazují argumenty příkazového řádku, se kterými byly jednotlivé procesy spuštěny, pokud jsou k dispozici.
Synopse
dotnet-dump ps [-h|--help]
Příklad
Předpokládejme, že spustíte dlouhotrvající aplikaci pomocí příkazu dotnet run --configuration Release. V jiném okně spustíte dotnet-dump ps příkaz. Výstup, který uvidíte, je následující. Argumenty příkazového řádku( pokud existují) se zobrazují ve dotnet-dump verzi 6.0.320703 a novější.
> dotnet-dump ps
21932 dotnet C:\Program Files\dotnet\dotnet.exe run --configuration Release
36656 dotnet C:\Program Files\dotnet\dotnet.exe
Použití dotnet-dump
Prvním krokem je shromáždění výpisu paměti. Tento krok lze přeskočit, pokud už byl vygenerován výpis paměti jádra. Operační systém nebo integrovaná funkce generování modulu .NET Core Runtime dump může každý vytvořit výpisy paměti jádra.
$ dotnet-dump collect --process-id 1902
Writing minidump to file ./core_20190226_135837
Written 98983936 bytes (24166 pages) to core file
Complete
Teď pomocí příkazu analyzujte výpis analyze paměti jádra:
$ dotnet-dump analyze ./core_20190226_135850
Loading core dump: ./core_20190226_135850
Ready to process analysis commands. Type 'help' to list available commands or 'help [command]' to get detailed help on a command.
Type 'quit' or 'exit' to exit the session.
>
Tato akce zobrazí interaktivní relaci, která přijímá příkazy jako:
> clrstack
OS Thread Id: 0x573d (0)
Child SP IP Call Site
00007FFD28B42C58 00007fb22c1a8ed9 [HelperMethodFrame_PROTECTOBJ: 00007ffd28b42c58] System.RuntimeMethodHandle.InvokeMethod(System.Object, System.Object[], System.Signature, Boolean, Boolean)
00007FFD28B42DD0 00007FB1B1334F67 System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo) [/root/coreclr/src/mscorlib/src/System/Reflection/RuntimeMethodInfo.cs @ 472]
00007FFD28B42E20 00007FB1B18D33ED SymbolTestApp.Program.Foo4(System.String) [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 54]
00007FFD28B42ED0 00007FB1B18D2FC4 SymbolTestApp.Program.Foo2(Int32, System.String) [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 29]
00007FFD28B42F00 00007FB1B18D2F5A SymbolTestApp.Program.Foo1(Int32, System.String) [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 24]
00007FFD28B42F30 00007FB1B18D168E SymbolTestApp.Program.Main(System.String[]) [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 19]
00007FFD28B43210 00007fb22aa9cedf [GCFrame: 00007ffd28b43210]
00007FFD28B43610 00007fb22aa9cedf [GCFrame: 00007ffd28b43610]
Zobrazení neošetřené výjimky, která zabila vaši aplikaci:
> pe -lines
Exception object: 00007fb18c038590
Exception type: System.Reflection.TargetInvocationException
Message: Exception has been thrown by the target of an invocation.
InnerException: System.Exception, Use !PrintException 00007FB18C038368 to see more.
StackTrace (generated):
SP IP Function
00007FFD28B42DD0 0000000000000000 System.Private.CoreLib.dll!System.RuntimeMethodHandle.InvokeMethod(System.Object, System.Object[], System.Signature, Boolean, Boolean)
00007FFD28B42DD0 00007FB1B1334F67 System.Private.CoreLib.dll!System.Reflection.RuntimeMethodInfo.Invoke(System.Object, System.Reflection.BindingFlags, System.Reflection.Binder, System.Object[], System.Globalization.CultureInfo)+0xa7 [/root/coreclr/src/mscorlib/src/System/Reflection/RuntimeMethodInfo.cs @ 472]
00007FFD28B42E20 00007FB1B18D33ED SymbolTestApp.dll!SymbolTestApp.Program.Foo4(System.String)+0x15d [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 54]
00007FFD28B42ED0 00007FB1B18D2FC4 SymbolTestApp.dll!SymbolTestApp.Program.Foo2(Int32, System.String)+0x34 [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 29]
00007FFD28B42F00 00007FB1B18D2F5A SymbolTestApp.dll!SymbolTestApp.Program.Foo1(Int32, System.String)+0x3a [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 24]
00007FFD28B42F30 00007FB1B18D168E SymbolTestApp.dll!SymbolTestApp.Program.Main(System.String[])+0x6e [/home/mikem/builds/SymbolTestApp/SymbolTestApp/SymbolTestApp.cs @ 19]
StackTraceString: <none>
HResult: 80131604
Analýza nevrácené paměti a přidělení
K nevracení paměti dochází v případě, že aplikace uchovává odkazy na objekty, které už nejsou potřeba, a brání uvolňování paměti uvolňování paměti. Slouží dotnet-dump k identifikaci nevrácené paměti, vyhledání největších objektů a pochopení, kde se spotřebovává paměť.
Úplný návod k ladění nevracení paměti najdete v tématu Debug nevracení paměti v .NET.
Identifikace největších objektů
dumpheap Pomocí příkazu s -stat možností zobrazíte souhrn objektů v haldě seřazené podle celkové velikosti:
> dumpheap -stat
Statistics:
MT Count TotalSize Class Name
00007f6c1eeefba8 576 59904 System.Reflection.RuntimeMethodInfo
00007f6c1dc021c8 1749 95696 System.SByte[]
00000000008c9db0 3847 116080 Free
00007f6c1e784a18 175 128640 System.Char[]
00007f6c1dbf5510 217 133504 System.Object[]
00007f6c1dc014c0 467 416464 System.Byte[]
00007f6c21625038 6 4063376 testwebapi.Controllers.Customer[]
00007f6c20a67498 200000 4800000 testwebapi.Controllers.Customer
00007f6c1dc00f90 206770 19494060 System.String
Total 428516 objects
Tento výstup ukazuje, které typy spotřebovávají nejvíce paměti. V tomto příkladu System.String objekty spotřebovávají přibližně 19 MB a Customer objekty spotřebovávají přibližně 4,8 MB.
Identifikace objektů podle oboru názvů nebo sestavení
Pokud chcete zjistit, které moduly nebo obory názvů využívají paměť, použijte -type k filtrování výsledků možnost s částečným názvem typu:
> dumpheap -type MyCompany.Data -stat
Statistics:
MT Count TotalSize Class Name
00007f6c21625038 15000 3600000 MyCompany.Data.CustomerRecord
00007f6c21625040 8000 2560000 MyCompany.Data.OrderHistory
00007f6c21625048 2000 960000 MyCompany.Data.ProductCache
Total 25000 objects, 7120000 bytes
Tento přístup vám pomůže určit, které části základu kódu jsou zodpovědné za spotřebu paměti.
Vyhledání nejvyššího počtu instancí
Pokud chcete zjistit, které typy mají nejvíce instancí bez ohledu na celkovou velikost, podívejte se na sloupec Počet ve výstupu dumpheap -stat . Objekty s vysokým počtem instancí můžou indikovat neefektivní problémy s vytvářením nebo ukládáním do mezipaměti:
> dumpheap -stat
Statistics:
MT Count TotalSize Class Name
00007f6c1dc00f90 206770 19494060 System.String
00007f6c20a67498 200000 4800000 testwebapi.Controllers.Customer
00007f6c1dc021c8 1749 95696 System.SByte[]
Tento příklad ukazuje 206 770 String instancí a 200 000 Customer instancí.
Analýza odkazů na objekty pomocí gcroot
Po identifikaci velkých nebo mnoha objektů můžete gcroot zjistit, proč se objekt neshromažďuje z paměti. Příkaz gcroot zobrazí referenční řetězec z kořenů GC na konkrétní objekt:
> dumpheap -mt 00007f6c20a67498
Address MT Size
00007f6ad09421f8 00007f6c20a67498 24
...
> gcroot 00007f6ad09421f8
Thread 3f68:
00007F6795BB58A0 00007F6C1D7D0745 testwebapi.Controllers.CustomerCache.GetAll()
rbx: (interior)
-> 00007F6BDFFFF038 System.Object[]
-> 00007F69D0033570 testwebapi.Controllers.Processor
-> 00007F69D0033588 testwebapi.Controllers.CustomerCache
-> 00007F69D00335A0 System.Collections.Generic.List`1[[testwebapi.Controllers.Customer]]
-> 00007F6C000148A0 testwebapi.Controllers.Customer[]
-> 00007F6AD0942258 testwebapi.Controllers.Customer
Found 1 root.
Tento výstup ukazuje, že Customer objekt je uložený objektem CustomerCache , který vám pomůže identifikovat zdroj úniku ve vašem kódu.
Analýza paměti podle velikosti objektu
-min Pomocí možností můžete -max filtrovat objekty podle velikosti:
> dumpheap -min 100000 -stat
Statistics:
MT Count TotalSize Class Name
00007f6c21625038 6 4063376 testwebapi.Controllers.Customer[]
00007f6c1dc014c0 12 416464 System.Byte[]
Total 18 objects
Tento příkaz zobrazuje pouze objekty větší než 100 000 bajtů, což vám pomůže soustředit se na největší příjemce paměti.
Najděte zablokování
Slouží dotnet-dump k diagnostice situací vzájemného zablokování, kdy jsou vlákna blokovaná čekáním na prostředky. Úplný návod k ladění vzájemného zablokování najdete v tématu Debug a deadlock v .NET.
Výpis všech vláken
threads Pomocí příkazu zobrazíte všechna spravovaná vlákna:
> threads
*0 0x1DBFF (121855)
1 0x1DC01 (121857)
2 0x1DC02 (121858)
...
Prozkoumání zásobníků vláken
Umožňuje clrstack -all zobrazit zásobníky volání všech vláken:
> clrstack -all
Hledejte vzory, ve kterých je blokováno Monitor.Enter více vláken nebo podobných primitiv synchronizace.
Vyhledání vlastníků zámků
syncblk Pomocí příkazu zjistíte, která vlákna blokují zámky a která vlákna čekají:
> syncblk
Index SyncBlock MonitorHeld Recursion Owning Thread Info SyncBlock Owner
43 00000246E51268B8 603 1 0000024B713F4E30 5634 28 00000249654b14c0 System.Object
44 00000246E5126908 3 1 0000024B713F47E0 51d4 29 00000249654b14d8 System.Object
Sloupec MonitorHeld zobrazuje počet vláken čekajících na zámek. Sloupec Informace o vlastnictví vlákna zobrazuje, které vlákno vlastní zámek.
Scénáře pokročilé analýzy paměti
Porovnání více výpisů paměti
Abyste pochopili růst paměti v průběhu času, shromážděte několik výpisů paměti a porovnejte je:
- Shromážděte výpis základního stavu:
dotnet-dump collect -p <pid> -o baseline.dmp - Nechte aplikaci běžet a využívat více paměti.
- Shromážděte druhý výpis paměti:
dotnet-dump collect -p <pid> -o after.dmp - Analyzujte výpisy paměti a porovnejte
dumpheap -statvýsledky.
Hledejte typy, které mají v druhém výpisu paměti výrazně více instancí nebo větších celkových velikostí.
Analýza paměti pro konkrétní typy objektů
Výpis všech instancí určitého typu:
> dumpheap -type Customer
Address MT Size
00007f6ad09421f8 00007f6c20a67498 24
00007f6ad0942210 00007f6c20a67498 24
...
Pak můžete dumpobj prozkoumat jednotlivé objekty:
> dumpobj 00007f6ad09421f8
Name: testwebapi.Controllers.Customer
MethodTable: 00007f6c20a67498
EEClass: 00007f6c21625000
Size: 24(0x18) bytes
File: /app/testwebapi.dll
Fields:
MT Field Offset Type VT Attr Value Name
00007f6c1dc00f90 4000001 8 System.String 0 instance 00007f6ad09421f0 Name
00007f6c1dbf4c18 4000002 10 System.Int32 1 instance 42 Id
Shromáždění výpisu paměti v kontejneru Dockeru
dotnet-dump vyžaduje ptrace schopnosti v kontejneru. Běžným způsobem, jak jim udělit, je spustit kontejner s --cap-add=SYS_PTRACE. V závislosti na vašem prostředí může být také potřeba upravit profil seccomp kontejneru. Projděte si výpisy paměti: Nejčastější dotazy k diagnostice problémů s konfigurací zabezpečení kontejneru.
Pokud chcete nainstalovat dotnet-dump v produkční imagi bez sady .NET SDK, použijte odkazy směrové odkazy ke stažení z části Instalace nebo použijte multi-stage sestavení Dockeru ke zkopírování binárních souborů nástroje z image sady SDK. Kompletní doprovodné materiály k diagnostice kontejnerů najdete v tématu Shromažďování diagnostiky v kontejnerech Linuxu.
Řešení potíží s shromažďováním výpisů paměti
Shromažďování výpisů paměti vyžaduje, aby proces mohl volat ptrace. Pokud máte problémy se shromažďováním výpisů paměti, může být prostředí, na kterém běžíte, nakonfigurované tak, aby tato volání omezovala. Projděte si naše výpisy paměti: Nejčastější dotazy k řešení potíží a potenciální řešení běžných problémů.