WinDbG工具實踐

WinDBG工具

  • WinDBG用來分析服務器上產生的dump文件信息
  • 處理CPU佔滿,內存居高不下的問題。
  • 程序死鎖的問題

處理步驟

  • 0 查看iis應用程序池對應的進程ID c:\windows\system32\inetsrv\appcmd list wp
    找出w3wp.exe對應的Web應用
    1. 使用producmp 工具監控服務器,當內存佔用超過多少時生成dump文件 procdump64 w3wp -ma 20480 -o D:\Dumps (當內存超過20G時生成Dump文件)
    1. 使用windb工具打開dump文件,並設置好符號文件(Symbol文件)及pdb文件的路徑,設置代碼路徑
    1. 使用windb工具的命令進行分析操做
    • 載入sos.dll 執行.load C:\Windows\Microsoft.NET\Framework64\v4.0.30319\SOS.DLL 須要根據程序的的版原本選擇sos.dll文件的加載路徑
    • 經常使用命令分析

!help sos指令幫助
!threads 顯示全部線程
!threadpool(!tp) 顯示程序池信息
!ProcInfo 顯示進程信息
!dumpheap 顯示託管堆的信息
!dumpheap -stat 檢查當前全部託管類型的統計信息
!dumpheap -type Person –stat 在堆中查找指定類型(person)對象,注意大小寫敏感
!clrstack 顯示調用棧
!clrstack -p 顯示調用棧,同時顯示參數
!clrstack 只顯示託管代碼,而kb只顯示非託管代碼
!dumpobj(!do) 顯示一個對象的內容
!dumparray(!da) 顯示數組
!DumpStackObjects(!dso) 當前線程對象分配過程
!syncblk 顯示同步塊
!runaway 顯示線程cpu時間
!gcroot 跟蹤對象內存引用
!pe 打印異常
!ObjSize 查看對象大小 ObjSize 用於知道對象地址時,查看該對象的大小。
!GCRoot 是一個很是有用的命令,它可以幫助咱們發現某對象上目前還存在的有效引用。這也是爲何GC還不回收這個對象的緣由。這個信息能夠很好的幫助咱們分析那些本應該沒有引用,但卻一直還存在有效引用的對象,由此發現咱們代碼中潛在的內存泄漏,同時咱們也能夠觀察到哪些對象是目前沒有引用了。
~*k 結合~和k命令,來顯示全部線程的callstack
.cls 清屏
kb 顯示當前線程的callstackwindows

https://blogs.msdn.microsoft.com/benjaminperkins/2016/11/07/lab-21-debugging-a-w3wp-process-with-high-memory-consumption/
https://blogs.msdn.microsoft.com/benjaminperkins/2016/06/16/lab-19-debugging-a-high-cpu-hang-w3wp-process-using-windbg/數組

相關文章
相關標籤/搜索