WinDbg排查CPU高的問題


一、概述

在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

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM