一、概述 在Window伺服器部署程式後,可能因為代碼的不合理或者其他各種各樣的問題,會導致CPU暴增,甚至達到100%等情況,嚴重危及到伺服器的穩定以及系統穩定,但是一般來說對於已發佈的程式,沒法即時看到出問題的代碼,而微軟提供了一個很好的工具“WinDbg”,使得我們能夠回溯問題。下麵講一下操作 ...
一、概述
在Window伺服器部署程式後,可能因為代碼的不合理或者其他各種各樣的問題,會導致CPU暴增,甚至達到100%等情況,嚴重危及到伺服器的穩定以及系統穩定,但是一般來說對於已發佈的程式,沒法即時看到出問題的代碼,而微軟提供了一個很好的工具“WinDbg”,使得我們能夠回溯問題。下麵講一下操作步驟。
二、操作步驟
1. 下載軟體:
下載地址:https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/debugger-download-tools
2. 安裝
只需要選擇:Debugging Tools for Windows 即可。
3. EXE位置
{安裝目錄}/Debugger/{x64 || x86}/windbg.exe
4. 獲取DMP文件
(1)打開任務管理器
(2)選擇CPU較高的進程
(3)右鍵“創建轉儲文件”
(4)獲取最後的目錄位置,拿到DMP文件即可
5. 查看有問題的進程(已準備w3wp.DMP文件)
(1)打開windbg.exe
(2)將w3wp.DMP 拖入視窗
(3)輸入指令載入sos clr
.loadby sos clr
(4)檢查clr版本是否一致
!clrstack
下圖表示clr不存在或者版本不一致
這個時候就需要將DMP文件所在伺服器的sos.dll clr.dll mscordacwks.dll 三個dll拷貝下來,所在位置:C:\Windows\Microsoft.NET\Framework?\version?\SOS.dll 同目錄下
放到一個目錄中:【D:\windb\dll】,以下指令用於指定對應的sos.dll,clr.dll
.cordll -lp D:\windb\dll
(5)獲取執行時間很長的線程
!runaway
可以看到前幾個線程執行了很長時間沒有結束掉,那麼我們就進入這個線程,查看具體的堆棧信息
(6)進入線程
~{threadId}s => ~61s
(7)查看堆棧信息
!clrstack
上圖即可看到對應的一些自定義的代碼,即可根據這些代碼分析哪塊代碼寫得不合理,也還可以點擊進入查看詳細的信息
6. 以上為簡單的查看CPU過高的簡單解決方案案例,對於WinDbg的相關指令可以使用搜索引擎進行搜索學習。以下附上一些文章:
https://blog.csdn.net/iwilldoitx/article/details/81048500
https://www.cnblogs.com/huangsitao/p/10299300.html