Sdílet prostřednictvím


Nástroj pro analýzu a shromažďování výpisu paměti (dotnet-dump)

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-dump
    
  • Pří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

  • --version

    Zobrazí verzi nástroje dotnet-dump.

  • -h|--help

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

    Zobrazuje 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, Full je 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.

  • --diag

    Povolí protokolování diagnostiky shromažďování výpisů paměti.

  • --crashreport

    Povolí 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:

  1. Shromážděte výpis základního stavu: dotnet-dump collect -p <pid> -o baseline.dmp
  2. Nechte aplikaci běžet a využívat více paměti.
  3. Shromážděte druhý výpis paměti: dotnet-dump collect -p <pid> -o after.dmp
  4. Analyzujte výpisy paměti a porovnejte dumpheap -stat vý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ů.

Viz také