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這裡報錯是...