用 WinDbg 診斷CPU占用高

2021-07-28 20:01:38 字數 1606 閱讀 6323

2. 安裝windbg, 這個就不贅述了。

需要注意的是有 windbg (x64) 和 windbg (x86) 兩個, 應該按dmp檔案**的伺服器開啟。

3. 按 ctrl+d 開啟 dmp 檔案, 注意直接點那個工具欄上的開啟檔案的圖示是錯誤的。

4. 載入 sos.dll 檔案。 這個最好是直接把 dmp 檔案**伺服器上的 sos.dll 檔案複製過來, 因為這才是最配套的, 自己本機的不一定合用。

複製到自己的 d:\ 之後, 再執行:

.load d:\sos.dll
5. 檢視執行緒池:

cpu 佔用率 77% , 執行緒池還是有關係。

6. 看看是哪個執行緒占用 cpu 時間過多。

執行緒: 0, 8, 126, 2, 127 這幾個cpu時間比較多。

7. 切換執行緒到0:

sta:   single-thread   apartment,   中文叫單執行緒套間。就是在com庫初始化的時候建立乙個記憶體結構,然後讓它和呼叫coinitialize的執行緒相關聯。這個記憶體結構針對每個執行緒都會有乙個。支援sta的com物件只能在建立它的執行緒裡被使用,其它執行緒如果再建立它就會失敗。   

mta:   mutil-thread   apartment,中文叫多執行緒套間。com庫在程序中建立乙個記憶體結構,這個記憶體結構在整個程序中只能有乙個,然後讓它和呼叫coinitializeex的執行緒相關聯。支援mta的com物件可以在任意執行緒裡被使用。多有針對它的呼叫都會被封裝成為訊息。

0=> 主線程

2=> mta(finalizer) **執行緒

6=> 執行緒池

8=> zwwaitforsingleobject+0xa 分配大物件引起gc關閉

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

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

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

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

排查Java高CPU占用原因

top命令發現某個程序占用了100 的cpu 通過ps命令,進一步確定哪個程序出了問題 再檢視執行緒占用cpu的列表 找到占用cpu最高的執行緒,檢視tid,將其轉換為16進製制格式 printf x n tid 而後檢視堆疊資訊 jstack pid grep 16進製制tid a 60這裡報錯是...