Záznam z přednášky pro konferenci TechEd DevCon Praha ze 16. května 2019.
Tag Archives: Heap
Advanced Debugging .NET – záznam, slides a dema [ShowIT SK 02/2016]
Slides a dema z mé přednášky pro konferenci Gopas ShowIT Bratislava z 10.2.2016:
- 2016-02 – ShowIT SK – Advanced Debugging .NET – slides [PDF]
- 2016-02 – ShowIT SK – Advanced Debugging .NET – Dema [ZIP, 717 KB]
Záznam z přednášky je publikován na našem HAVIT YouTube Channel.
Dotčená témata
- StackOverflow troubleshooting
- Windows Debugger, SOS, DebugDiag
- Prozkoumávání zásobníku
- Prozkoumávání haldy, rootů, finalization queue
- GC Root identification (static fields)
.NET Memory Internals – záznam, slides a dema [ShowIT SK 02/2016]
Slides a dema z mé přednášky pro konferenci Gopas ShowIT Bratislava z 9.2.2016:
- 2016-02 – ShowIT SK – .NET Memory Internals – Slides [PDF]
- 2016-02 – ShowIT SK – .NET Memory Internals – Dema [ZIP, 57kB]
Záznam z přednášky je publikován na našem HAVIT YouTube Channel.
Dotčená témata
- Zásobník (Stack)
- Hodnotové vs. referenční datové typy
- Volání metod s předáváním parametrů hodnotou vs. referencí
- Halda (Heap)
- Garbage Collection
V případě zájmu o dané téma doporučuji shlédnou samostatné dvě přednášky, kde bylo o trochu více časového prostoru:
CLR Profiler, WinDbg a SOS při diagnostice memory-leaků
Problémem rychlého prozkoumávání velkých memory-dumpů v WinDbg/SOS je, že většinu zkoumání provádíme nad jednotlivými instancemi objektů. Vytipujeme si závadný typ (!dumpheap -stat) a pro pár instancí (!dumpheap -mt <MT>) zkoumáme, odkud pocházejí (!GCRoot <ObjAddr>). Pokud nemáme dost štěstí, po pár pokusech (které mohou být navíc při velkých memory-dumpech dosti časově náročné), nás to přestane bavit.
Nástrojem, jak provést v takovém případě hromadnou analýzu a pohlédnout na heap určitým agregovaným pohledem, je například CLR Profiler a jeho Heap Graph:
Ukazuje nám, jak na sebe jednotlivé typy navzájem referencují, a to vše v poměru k velikosti paměti (included, tedy včetně grafu referencovaných instancí). Vše je seskupeno po typech, nezabýváme se tedy jednotlivými instancemi.
Jak se k tomu dopracovat, mám-li memory dump
Z WinDbg/SOS je potřeba si vytvořit LOG-soubor pro CLR profiler pomocí příkazu
!TraverseHeap C:\output-path\name.log
…to samotné může nad velkým memory-dumpem hooodně trvat. Podle stroje a dumpu až hodiny. Na rozdíl od čekání na !GCRoot však dostanete výstup, který vás k cíli téměř jistě navede.
Následně již soubor načteme do CLR Profileru pomocí File / Open log file…
…zase čekáme a čekáme :-))
A na dialogu Summary for zvolíme Heap Graph
…čekáme a čekáme, až dostaneme třeba:
Cache není nikdy dost ;-)
Mimochodem CLR Profiler nám dá i další zajímavé histogramy, které nám pomohou k pochopení poměrů v analyzovaném memory-dumpu. O nich možná někdy příště…
Viz též
.NET Memory Internals 2/2 – Heap, Garbage Collector – záznam, slides a dema [MS Fest Praha 2014]
Slides z mé přednášky 30.11.2014 pro konferenci MS Fest Praha:
- 2014-11 – MS Fest Praha – .NET Internals 2 – Heap – Dema [ZIP]
- 2014-11 – MS Fest Praha – .NET Internals 2 – Heap – Slides [PDF]
Z přednášky jsem pořizoval záznam, který najdete na našem HAVIT YouTube Channelu:
.NET Internals 2/3 – Heap, Garbage Collector – záznam, slides a dema [TechEd Praha 2014]
Dema a slides z mé přednášky pro Gopas TechEd DevCon Praha 2014:
- TechEd 2014 – .NET Internals – Garbage Collector [PDF]
- TechEd 2014 – .NET Internals – GarbageCollector – Dema [ZIP]
Druhá ze série přednášek:
- .NET Internals 1/3 – Paměť a datové typy (Stack)
- .NET Internals 2/3 – Garbage Collector (Heap)
- .NET Internals 3/3 – Advanced Debugging Techniky
Z přednášky jsem pořizoval záznam, který najdete na našem HAVIT YouTube Channelu: