現象発生時(ハングアップや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 件のコメント:
コメントを投稿