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 的記憶體配置所導致。












