Windows Performance Analyzer 有別於PerfMon的圖形化互動效能分析工具
這篇文章主要介紹一個工具 Windows Performance Analyzer,這個工具特別在哪呢?
因為這個工具相當於 Performance Monitor + Process Monitor + Process Explorer + WinDBG。
使用 Performance Monitor 收集效能資訊經常有一個缺點,
當我們希望更進一步看該Process 的 stacks或是該Process 當時有執行哪些 threads 時,
會受到一些限制或是無法直接查詢取得。
相反的,Process Monitor 或是 Process Explorer 雖然可以很快的取得這些資訊,
但是要將該效能記錄下來,短短幾分鐘內Log的檔案往往超過好幾百 MB。
WinDBG 只能一次性的取得該電腦當下的系統資訊,沒有歷史紀錄而且操作上有許多的指令。
Windows Performance Analyzer提供圖形化介面,可以取得效能歷史資訊,同時又可以提供threads與Stacks的進一步資訊!
何處下載?
Get the standalone debugging tools (WinDbg) as part of Windows 8.1 SDK (English only)
Windows Performance Analyzer 主要是 SDK 中的一個小工具,
安裝時僅需安裝 “Windows Performance Toolkit”即可。其它的無需安裝。如下圖所示。
設定 Windows Performance recorder
使用上就像 Performance Monitor 類似一般,只不過 Windows Performance Recorder 將 counters 簡化,
我們只需要選取類別即可,不需要選取特定的 counters!
例如我們可以選取 CPU usage 與 Disk I/O activity 來觀察 CPU 與磁碟運作的狀況。
如果要觀察 memory leak的狀況則需要勾選 “Heap Usage”
選取完之後,就可以開始錄製收集效能資訊。最後儲存。
直接啟動 Windows Performance Analyzer 分析剛剛儲存的資訊。
初步可以從這個圖得知,該電腦一開始遇到 Computation (CPU 效能) 後來遇到Storage (磁碟)的效能瓶頸。
例如,這個例子我們很清楚的發現 eatCPU.ext 一直占用CPU 較高的資源。
我們可以針對 eatCPU.exe 觀察更進一步的資訊,Thread 與 Stack
為了讓 Stack 可以正確的顯示 module 與 function的名稱,可以設定 Symbol Path
Symbol path 設定範例如下。srv*c:\symbols*http://msdl.microsoft.com/download/symbols;
設定完 Symbol 與 Stacks 之後,我們可以看出該eatCPU.exe 的stack 狀態
可以看得出來 main 呼叫 function 1 呼叫 function 2,呼叫次數超過 27,598導致 CPU 負荷很高。
如果是使用 Process Explorer 的話,我們同樣可以針對 thread 8624 > 右鍵 > Stack 資訊。同樣可以得到類似的結果。
另外,我們也發現 Disk Activities 也特別高。為什麼呢?
我們發現是 “System(4)”的 Disk Service Time 占用最多。
為什麼”System(4)”的 Disk Service Time 占用最多?
我們可以按右鍵,Path Name
針對 System (4)展開之後,我們發現 IO time 時間使用最多的 Path 分別為
- C:\$BitMap
- c:\$MIT
另外,也可以對於 Memory Leakage 的狀況分析,
例如這張圖,可以明顯的看到 VirtMemTest64.exe 記憶體使用不斷的上升。
同樣方式可以進一步追查該 Thread 與 Stacks
Stacks 會列出該VirtMEmTest64.exe 函數呼叫的過程。
如下圖所示,我們發現,VirtMEmTest64原來呼叫了許多的 AllocateHeap 的記憶體配置所導致。