2014年10月29日水曜日

メモリダンプをCLRプロファイラーで開く方法

CLRプロファイラーで解析対象のプロセスを起動したり、アタッチするのは非常にオーバーヘッドが高い。場合によってはお目当ての現象を発生させるまでに永久の時間を要する。。
現象発生時(ハングアップやOutOfMemoryException)にメモリダンプをとって、これを元に解析なんて事が出来れば良いのだけど、残念ながらCLRプロファイラはダンプ読み込みをサポートしていない。
(※)市販の「.NET Memory Profiler」はダンプ読み込みをサポートしているが市

と思ったら、SOS.DLLコマンド「!TraverseHeap」でCLRプロファイラ形式の.logファイルを生成出来る模様。

 (ex)WinDbgでお目当てのダンプをロードして。。
 0:000> .loadby sos mscorwks
 0:001> !traverseheap c:\log\test1.log
 Writing CLRProfiler format to file c:\log\test1.log
 Gathering types...
 tracing roots...
 Scan Thread 0 OSTHread 2fe8
 Scan Thread 2 OSTHread 2b20
 Scan Thread 3 OSTHread 29a4
 
 Walking heap...
 .......................................................................
 file c:\log\test1.log saved


収集した「test1.log」をCLR Profilerで開くだけ。




[参考]
・「Next Generation Production Debugging: Demo 2 and Demo 3
・「Getting started with WinDbg and Sos.dll
・「Mapping the Memory Usage of .NET Applications: Part 3, CLR Profiler

0 件のコメント:

コメントを投稿