WinDbg 追查 CPU 飆高問題一文發表後,在 FB 收到網友 Webber Han 回饋(在此感謝),提到射茶包利器 Process Explorer 也能像 WinDbg 一樣檢視 Callstack 中的 .NET 組件、函式資訊,查了一下,這是 2012 年 15.2 版就加入的功能,Lag 大了。

關鍵在於「Configure Symbols」有無設定妥當,Process Explorer 的 .NET Callstack 解析也是借助 WinDbg 完成,故機器要先裝妥 WinDbg,開啟 Process Explorer 選單 Options / Configure Symbols… 將 Dbghelper.dll 改指向 WinDbg 的 dbghelper.dll,並比照 WinDbg 設定 Symbols path:

我寫了一支執行數十萬次 JsonConvert.SerializeObject 的 ASP.NET 程式當成測試對象。開啟 Process Explorer 找耗用大量 CPU 的 w3wp.exe,點兩下開啟 Properties,切換到 Threads 頁籤,找出佔用 CPU 最多的 Thread,點選 Stack:

此時 Stack 資訊可看出 ASP.hang_asp.Page_Load() 呼叫 HangTest.dll TestHelper.RunTest() ,RunTest() 呼叫 RunJsonTest(),其中再呼叫 JsonConvert.SerializeObject() 的呼叫關聯。

如此便能即時檢視執行中 .NET 程序的 Callstack,快速鎖定問題來源,在調查程式當住(Hang)問題時又多了一項選擇!


Comments

Be the first to post a comment

Post a comment