转载:http://ste0623.spaces.live.com/blog/cns!15D2D25FF6287C7A!498.entry
寫微軟的程式寫久了,最常見到但也最讓人無力的問題就是Server掛掉
可能是Memory不足,也可能是CPU 100%被佔據,而你完全不知問題在哪裡,只能乖乖重開機
重開機變成了Windows Server 的例行公事
或許有人知道Memory Dump這種東西,只有一群神一般的人才看得懂
對一般人而言想從Memory Dump看出什麼端倪簡直就是不可能的任務
但是,情況現在改觀了
微軟一向最厲害的就是,把艱難的東西用很容易上手的外裝包裝起來
也許功能因此減少了,但是上手卻容易了
最近就玩到這樣一個東西–Debug Diagnostics Tool
讓Debug IIS hang 簡直是容易到讓人無法相信
這東西要裝在你的IIS Server上,不過個人工作的電腦通常也要裝,因為dump完大概下一件事就是趕快重開機
讓production server趕快回復運作,哪裡還有那種美國時間讓你在上面跑分析
而且分析過程中要上網download symbol file,有時候production server是不對外的
裝完以後就像這樣,放在程式集裡面
執行起來的畫面像這樣,當你的IIS掛掉時,先不要急著重開
1.趕快先把犯罪的證據保留下來,從Tools->Create IIS Hang Dump將IIS相關的process都dump下來
2.然後再用最下面的Add Data Files將dump的結果讀進來
3.在上面的ListBox選擇 Crach/Hang Analyzers
4.點選下面的 Start Analysis
就這樣,夠簡單了
那分析結果如何解讀? Watch this
直接告訴你哪一個thread block住後面的程式,那麼thread 19是什麼?點一下超連結
直接告訴你這是哪支ASP,連第幾行都告訴你了
那.NET程式可不可以?
我寫了一個無窮回圈的webservice
dump出來的report像這樣
這裡我還沒有研究透徹,因為只看到一堆循環不已的call
但是把同樣的dump用另一個工具 WinDbg 去讀,可以得到這樣的結果,連method都列出來給你
但是這個工具超級難用,要對memory dump以及很多系統面的東西有些了解才能運用自如(廢話,我就是看不懂memory dump咩)
Debug Diagnostics Tool 適合剛開始初學使用,我其實還是只用了很小一部分的功能,他還可以自訂rule,當crach/hang發生時自動幫你dump,更可以直接 attach 到某個process去debug
WinDbg不是給普通人用的,看看我列出來的連結就知道,給寫driver或玩系統核心的人用的….
這裡還有一些Debug Diagnostics Tool的教學,很清楚
這裡則有許多WinDbg的翻譯文章
先寫這些,因為用的真的還不多,但是因為太好用了,還是先把知道的寫出來
转载:
用WinDbg分析Debug Diagnostic Tool生成的Userdump文件
1、下载WinDbg(Debugging Tools for Windows):http://www.microsoft.com/whdc/devtools/debugging/default.mspx
2、安装WinDbg
3、运行WinDbg
4、配置Symbol文件路径: File>Symbol File Path,输入:SRV*c:\websymbols*http://msdl.microsoft.com/download/symbols
5、打开Userdump文件:File>Open Crash Dump
6、执行命令:
1)kbn
2).loadby sos mscorwks
3)!clrstack