2015-10-06 46 views
1

我得到了內存轉儲到分析服務的CPU使用率過高這是在Windows 2008 R2(客戶機)上運行變爲0。 轉儲是使用任務管理器進行的。CPU使用率,只要我附上過程WinDbg的

我嘗試使用我們提供給我的轉儲中的符號(轉儲是使用任務管理器拍攝的),但沒有成功。 後來,我發現從任務管理器獲取的轉儲未運行,因此我使用Windbg在我的系統上轉儲了服務。我能夠加載符號。

但是,我需要來自客戶機的轉儲文件。當我試圖通過將其附加到CPU的85%左右來轉儲服務時,將其附加到Windbg,令我驚訝的是CPU消耗突然下降到0%。

很顯然,我需要轉儲從客戶端計算機來分析發生了什麼,以及爲什麼服務消耗CPU的85%。

沒有得到如何使用WinDBG的走場,只要我按F6附加服務時,CPU佔用率下降到0%。

回答

6

當你使用WinDbg所有的線程連接,直到您發出g命令懸浮在您服務。這就是爲什麼你的服務的CPU消耗量爲零。但這沒關係,因爲當CPU消耗爲時,所有線程正在做的是85%時的~*kb命令會告訴你。然後發出g,注意CPU消耗恢復。當它足夠高時,進入(Debug | Break),然後再次運行~*kb以查看線程在做什麼。重複多次,你應該看到一個模式。此外,每次使用!runaway可以輕鬆查看最繁忙的線程。

+0

快照不顯示過去,這就是爲什麼ETW/xperf是診斷CPU使用情況的更好方法 – magicandre1981

5

不使用轉儲,而是使用ETW捕獲CPU使用率的跟蹤。 ETW跟蹤包含調用的總和而不是像轉儲中的快照。要捕獲跟蹤,安裝Windows Performance Toolkit from the Windows SDK,打開command prompt as admin並運行此捕捉CPU使用率:

xperf -on延遲-stackwalk輪廓-buffersize 2048 -MaxFile 2048 -FileMode通知& &超時-1 & & xperf -d C:\ HighCPUUsage.etl

後您完成捕獲跟蹤,做在ETL文件雙擊打開它。現在設置debug symbols and load them

現在拖動&降CPU使用率(採樣)圖形的分析窗格中,選擇「按進程利用率,堆棧」

enter image description here

現在擴大您的服務棧,看看哪些函數調用:

enter image description here

微軟explained this here in a Video