Asp.net IIS w3wp.exe占CPU100%的排查方案


最近應用偶發性的出現cpu100%占用過高的報警,因為項目比較大,流程涉及非常多,地毯式排查已經不可能。

解決辦法目前來看最快捷的莫過於WinDbg分析dmp文件。下面詳細步驟介紹一下:

1、如何捕獲dmp文件

兩個辦法,第一個可以通過閾值的方式,讓服務器在cpu到達一定比例的時候,自動打印dmp文件,詳細見:

https://www.cnblogs.com/mamingbo/p/5656104.html

具體我們有實際操作過。

第二個辦法,是直接在服務器cpu報警100%的時候,通過任務管理器,轉存儲文件為dmp

 

注意上面這步驟,可能會影響正在運行的生產環境,存儲預估可能要1分鍾左右

2、將dmp文件拷貝到自己本地電腦,同時在服務器對應目錄下拷貝如下dll 所在位置:C:\Windows\Microsoft.NET\Framework?\version?\SOS.dll 同目錄下(sos.dll clr.dll mscordacwks.dll 三個dll拷貝下來)

dmp和dll拷貝到自己的本機備用,例如D:\dump\

3、安裝WinDbg,(https://docs.microsoft.com/zh-cn/windows-hardware/drivers/debugger/debugger-download-tools)

4、開始分析調試,打開WinDbg,文件-->Open Dump File 加載剛剛的dmp文件

 

第一個命令:.cordll -lp D:\dump 指向剛剛的dll所在路徑

第二個命令:!runaway,分析dmp文件

馬上可以看到哪些進程是消耗Time最長的,時間越長占用的cpu時間越久,這樣就可以分析那個線程的問題了。

例如上圖中的,19:xxxx,23:xxxx,41:xxx是時間最長的線程,下一步進入到線程里,分析是那個方法導致的

 

5、定位問題,首先進入線程,命令:~19,意思是19這個線程。然后執行!clrstack,問題頓顯,查看具體是哪個方法導致的。

 

 

 6、至此分析結束,問題找到。同時你會發現.net framework 的GC真的是cpu大戶,盡快轉.net 5吧

 


免責聲明!

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



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