一文解读使用WinDbg排查iis 中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
往期精彩回顧
【.net core】電商平臺升級之微服務架構應用實戰
.Net Core微服務架構技術棧的那些事
Asp.Net Core 中IdentityServer4 授權中心之應用實戰
Asp.Net Core 中IdentityServer4 授權中心之自定義授權模式
Asp.Net Core 中IdentityServer4 授權流程及刷新Token
Asp.Net Core 中IdentityServer4 實戰之 Claim詳解
Asp.Net Core 中IdentityServer4 實戰之角色授權詳解
Asp.Net Core 中間件應用實戰中你不知道的那些事
Asp.Net Core Filter 深入淺出的那些事-AOP
Asp.Net Core EndPoint 終結點路由工作原理解讀
ASP.NET CORE 內置的IOC解讀及使用
總結
以上是生活随笔為你收集整理的一文解读使用WinDbg排查iis 中CPU占用高的站点问题的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Source Generator:C#
- 下一篇: 人在职场,表达似水