一、概述
在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
轉載請註明出處,本文鏈接:https://www.uj5u.com/net/33178.html
標籤:C#
