文章出處

Roslyn的PM(程序經理) Bill Chiles,Roslyn使用純托管代碼開發,但性能超過之前使用C++編寫的原生實現,這有什么秘訣呢?他最近寫了一篇文章叫做《Essential Performance Facts and .NET Framework Tips》里頭推薦了一個性能分析工具《Improving Your App's Performance with PerfView》。PerfView能夠收集Windows事件跟蹤(ETW)數據來追蹤程序的調用流向,這些程序通過調用哪個函數識別頻率。除了配置程序性能數據(Perfmon、PAL和Xperf等工具不能輕松完成),PerfView還能分析程序內存堆來幫助確定內存的運用是否高效。它還有一個Diff功能,可以讓你確定跟蹤間的任意差別來幫助你認出所有逆行。最后,該工具還有一個Dump功能可以生成一個程序內存轉儲。

安裝PerfView

從微軟下載的 PerfView 包括一個zip壓縮文件,其中只有一個可執行的文件perfview.exe,這簡化了安裝。你可以將這個文件復制到多個你想跟蹤的服務器上,然后在這些服務器或你本地的工作站中分析數據。PerfView在Windows Vista、Windows 7、Windows Server 2008、Windows Server 2008 R2和Windows Server 2012上都受到支持,要求.NET FX 2.0以上。

收集配置數據

PerfView利用Windows事件追蹤,而ETW從Windows 2000 Server以來就一直內置于操作系統中。只是最近才有XPerf和PerfView一類的工具利用ETW數據來解決性能問題。事件數據被收集到一個事件跟蹤日志(ETL)中。根據你想要跟蹤事件的數量和時間的長度,ETL文件可能會非常大。你可以限制這個日志文件的大小,如果空間受限或者你不知道問題何時發生的話,你還可以讓它們循環。默認每毫秒一次的采樣間隔在收集時間內產生了大概百分之十的CPU開支。建議大概5000個樣本(5秒)用于一次代表性配置采樣。

開始一次數據收集有兩種方式,用運行命令啟動一個程序或者用收集命令在計算機范圍內收集數據。這些命令可以由收集下拉菜單下的GUI引發,或者從CLI或腳本中執行“PerfView run”或“PerfView collect”命令。下圖顯示運行命令tutorial.exe時收集數據的過程,tutorial.exe是一個內置的訓練練習。
image

查看結果

一旦你在些之間針對性能問題收集了數據,你可以用PerfView分析ETL文件。該ETL文件會出現在左邊的窗口,有收集日志或運行命令期間你提供的名字。通過雙擊該RTL文件,十來個獨立的節點會和指代它們內容的名字一起出現。例如,你會在下圖中看到跟蹤信息、程序、事件、CPU堆棧。雙擊各個節點,適當的查看器會打開這些內容。

image

為了針對一個特定程序分析計算密集型性能問題,你將需要學習要調用的堆棧和函數。這可以通過雙擊左側窗口中的“CPU堆棧”節點完成。接著你會得到提示來選擇你感興趣的程序。最后,該CPU堆棧查看器會在獨立的窗口中打開,如下圖QQ進程的信息 ,你可以確定調用了哪個函數以及它們的頻率。

image

如果你仔細查看上面的例子,你會發現第一行顯示<<user32!?>>。“!?”代表PerfView不能解析這個模塊名稱。你可以雙擊這個未知模塊名稱并選擇“查找符號”來顯示該模塊名稱。按用戶指南所述配置符號路徑對于解析操作系統函數名稱也許是有必要的。

PerfView是一個便于用戶的工具,可以用來收集和分析ETW數據用于解決配置程序性能數據的問題。這個工具可以快速地顯示為這個程序執行的操作系統函數,了解性能問題可能潛藏的位置。


文章列表




Avast logo

Avast 防毒軟體已檢查此封電子郵件的病毒。
www.avast.com


arrow
arrow
    全站熱搜
    創作者介紹
    創作者 大師兄 的頭像
    大師兄

    IT工程師數位筆記本

    大師兄 發表在 痞客邦 留言(0) 人氣()