使用Windbg尋找高CPU占用執行緒

2021-07-12 08:04:19 字數 675 閱讀 4305

在乙個任務中使用多執行緒程式設計,程式執行一段時間後就佔滿了cpu,嚴重拖慢系統執行速度。這裡所說的高cpu,意思就是乙個執行緒占用了乙個cpu的大部分執行時間,如果是單核的cpu,表現為cpu占用近100%;相應的雙核的話乙個執行緒會佔到50%的cpu。

我的電腦是雙核四執行緒的cpu,所以當乙個執行緒死迴圈的時候會占用掉25%的cpu時間。具體表現為:執行程式的最開始表現正常,隨後會看到cpu占用上公升至25%、50%、75%等。在這樣的情況下我用windbg attach到目標程序,並通過!runaway命令來列出各執行緒所耗費的時間。占用時間最多的就是那些假死的執行緒了,然後~*kb列出各執行緒的呼叫棧,分析一下耗費時間長的執行緒的呼叫棧基本可以找出問題所在的原因。

回到我的程式,從呼叫棧上並不能明顯看出問題:乙個執行緒「卡」在recv上,另乙個「卡」在select上面;但也不應該耗費如此多的cpu時間。再看一下**,外層有乙個while死迴圈,用於處理client發過來的資料,問題基本實在這個while迴圈裡面。再後來,仔細閱讀**後發現原因如下:

這樣處理之後,執行緒佔滿cpu的問題就得到解決了。由於一些原因,這裡沒有把實際情況下的一些分析資料貼出來。

p.s. 使用process explorer也能簡單排查問題執行緒。雙擊程序可以檢視程序的屬性,然後選擇「執行緒」選項卡,雙擊高cpu的執行緒就可以看到呼叫棧了。

使用Windbg尋找高CPU占用執行緒

在乙個任務中使用多執行緒程式設計,程式執行一段時間後就佔滿了cpu,嚴重拖慢了系統的執行速度。這裡所說的高cpu,意思就是乙個執行緒占用了乙個cpu的大部分執行時間,如果是單核的cpu,表現為cpu占用近100 相應的雙核的話乙個執行緒會佔到50 的cpu。我的電腦是雙核四執行緒的cpu,所以當乙個...

用 WinDbg 診斷CPU占用高

2.安裝windbg,這個就不贅述了。需要注意的是有 windbg x64 和 windbg x86 兩個,應該按dmp檔案 的伺服器開啟。3.按 ctrl d 開啟 dmp 檔案,注意直接點那個工具欄上的開啟檔案的圖示是錯誤的。4.載入 sos.dll 檔案。這個最好是直接把 dmp 檔案 伺服器...

如何使用Windbg 查Cpu飆公升問題

2 開啟windbg 設定 file symbol search path 位址如下 c symbols srv c mylocalsymbols srv c mysymbol 3 開啟windbg 將程序轉存的程序檔案 拉進windbg 4 在windbg介面 輸入載入命令 load c wind...