昨天使用 WinDbg 追查 ASP.NET CPU 100% 原因的文章得到不少朋友的回饋,其中 Robert Hu 留言提到一個更方便的 Dump 擷取與問題分析工具,試用之下果然犀利,在此補上介紹。

Debug Diagnostic Tool (DebugDiag) 是微軟針對程式當掉(Crash)、當住(Hang),以及記憶體洩漏(Memory Leak)等問題設計的快速偵察工具,目前最新版為 Debug Diagnostic Tool v2 Update 2,共有三項兵器:

  1. DebugDiag 2 Collection

    自動化蒐集 Dump 檔的工具,可針對不同情境指定抓取 Dump 時機,例如:程式拋出非預期的例外、效能計數器達到門檻、HTTP 回應時間過慢、監測記憶體用量改變… 等,功能強大。


    DebugDiag Collection 最強悍之處在於設定規則守株待兔,當程序 CPU 使用量或其他效能指標超過門檻時匯出 Dump 檔(注意:匯出 Dump 期間程序會暫停,將影響線上使用者),對付「ASP.NET 不定期 CPU 飆高」之類的問題格外有用!
    下圖範例即為主機 CPU 使用百分比超過 30% 連續五秒時產生一到多個 AppPool Process 的 Dump 檔,有助於抓出耗用 CPU 的網站程式。
  2. DebugDiag2 RuleBuilder

    若 DebugDiag 2 Collection 預設抓取規則不夠用,Rule Builder 支援以視覺化流程圖方式自訂規則。
  3. DebugDiag 2 Analysis

    自動 Dump 分析工具,針對當機、當住及記憶體洩漏等情境預先寫好分析邏輯,輸入一個或多個 Dump 檔後自動產生分析報表。上回說到的 ASP.NET CPU 100% 問題,使用 PerfAnalysis 可以瞬間找到答案。

操作方法很簡單,如上圖所示,按下 Start Analysis,選好 Dump 檔,DebugDiag Analysis 就開始分析,稍待約一分鐘(運算時間長短視 Dump 大小、數量、分析項目而定)熱騰騰的分析報表網頁就出爐了。在報表尋找 Analysis Details /PerfAnalysis / Performance Summary / Statistical Rollups / Top 1 Operations By Duration,相當於用 WinDbg 尋找耗用 CPU 最久的 Thread 的分析資料,而共用元件呼叫 ODP.NET OracleCommand.ExecuteReader 的 Callstack 資料就在眼前。

使用 DebugDiag Analysis,只需幾個 Click 就能得到與 WinDbg 一連串指令操作相當的結果。若 WinDbg 是傳統單眼,DebugDiag Analysis 就像傻瓜相機,管它什麼快門調多快光圈開多大,按下快門就有好照片,還附贈美肌效果,神奇無比。

至於這兩種工具的選擇,若目的在檢視問題 Thread 當下的 Callstack,要「快」請用 DebugDiag Analysis,要「帥」就用 WinDbg 吧!哈。


Comments

# by shengyan cheng

還有一個新朋友IntelliTraceCollector 適用情況稍有不同.

# by Jeffrey

to shengyan, 感謝補充,順補一篇詳細介紹 https://dotblogs.com.tw/franma/archive/2012/12/21/85859.aspx

# by pokemon go apk

It is a great article. You will surely like this also because it is a great stuff, yeah it’s give us lots of interest and pleasure. Their opportunities are so fantastic and working style so speedy. Thank you for sharing the nice article.

# by Patrick

請問黑大,有沒有Web Request 跟Performace上的測試範例或是經驗,今天試圖使用此工具測試,但設定玩rule後,並沒有預期產出DMP檔案,不確定哪裡設錯,再請教有無建議的方向,感謝。

# by Jeffrey

to Patrick, 我有測過抓特定W3WP Process CPU百分比,再配合ASPX故意跑無窮迴圈觸發產生Dump,測試是成功的,你也可以試試這個做法。

Post a comment


49 - 24 =