1. 程式人生 > 其它 >【轉載】Windbg+Procdump解決w3wp.exe CPU過百問題

【轉載】Windbg+Procdump解決w3wp.exe CPU過百問題

Windbg+Procdump解決w3wp.exe CPU過百問題

最近釋出在windows server2012 IIS8.0上的一個WebAPI專案,才幾十個人線上,CPU就會出現過百情況,並且CPU一旦過百應用程式池就自動暫停掉,看到這個問題我感覺應該是程式哪個地方出了問題, 8盒16G 應該配置還是可以的。打算使用windbg找到這個問題。

最近釋出在windows server2012 IIS8.0上的一個WebAPI專案,才幾十個人線上,CPU就會出現過百情況,並且CPU一旦過百應用程式池就自動暫停掉,看到這個問題我感覺應該是程式哪個地方出了問題, 8盒16G 應該配置還是可以的。打算使用windbg找到這個問題。

為了快速定位問題我就直接在生產環境安裝了windbg,為了採集dump檔案,我選擇Procdump。Procdump無需安裝,下載下來直接放到一個目錄下即可。以下是解決問題的過程+截圖:

步驟一:

安裝windbg,注意32和64,要安裝相應的版本,直接點選下一步即可。

步驟二:

Copy Procdump 檔案到伺服器上的一個目錄下,目錄沒有限制

如圖:C:\software\Procdump,這裡的dbghelp.dll是從windbg安裝目錄下copy過來的,是我為了解決下面這個坑:除錯High CPU問題的時候經常用到的一個命令是!runaway,但是有些時候!runway在ProcDump抓取的dump中提取不出來。解決的方法是將Debug Tools for Windows (windbg)安裝目錄下的dbghelp.dll拷貝到procdump目錄下,然後再執行命令抓取dump。

0:000> !runaway ERROR: !runaway: extension exception 0x80004002.

"Unable to get thread times - dumps may not have time information"

步驟三:

在doc視窗下執行procdump命令,cd /d c:\Software\Procdump

步驟四:

執行procdum命令,執行 procdump -c 50 -s 4 -ma -n 3 w3wp 命令含義為:當w3wp.exe cpu超過50%,並且持續4秒,抓取3個dump檔案儲存起來,儲存位置預設為procdump檔案所在的目錄。

如圖:

出現如圖結果證明已經進入監控狀態。接下來就是等著CPU超過50%了。

沒過一會就看到效果了

dump檔案已經抓取到,我們來看下dump檔案儲存位置:

那麼接下來就是開始分析了。

步驟五:

啟動已經安裝好的Windbg,開始分析採集的dump檔案

步驟六:

為了不影響正在執行的專案,我將釋出的專案檔案單獨從copy了一份出來,如圖所示:我是web api專案

步驟七:

設定系列目錄:

Windbg->file->Symbol File Path

Windbg->file->Source File Path

步驟八:

載入dump檔案

Windbg->file->open Crash Dump

先選擇第一個dump檔案。

步驟九:

載入sos.dll 執行.load C:\Windows\Microsoft.NET\Framework64\v4.0.30319\SOS.DLL

我是4.0 的 注意版本 64位

步驟十:

!threadpool 檢視當前CPU狀況 執行緒數等等

步驟十一:

執行 !runaway 命令 檢視那幾個執行緒使用的高

步驟十二:

~執行緒IDs 跳轉到那個執行緒

步驟十三:

!clrstack 看看這個執行緒再幹嘛 執行那些方法

步驟十四:

將圖中紅框列出來的方法去專案中查詢下,發現了問題:

過載方法的時候引數傳遞不正確,出現了死迴圈,至此問題得到了解決。

本文來自部落格園,作者:Love In Winter,轉載請註明原文連結:https://www.cnblogs.com/LifeDecidesHappiness/p/15633116.html

歡迎掃碼打賞