用線形圖來表示CPU占用
縱向表示CPU使用率,橫向表示時間。用顏色來區分用戶態CPU和內核態CPU。類似這樣的圖還可以用來表示無響應時間,內存占用等。
另外我們也可以自動分析堆棧數據,找出一段時間內連續出現在堆棧中的函數,在線形圖上醒目標出。因為這種情況很有可能是卡住或阻塞了。如下圖紅線所占有的時間段內表示主線程堆棧中都有USER32.dll 77D18816調用,再配合PDB就知道調用的是哪個函數了。這樣可以方便的找出性能瓶頸。
還有其它各種表現形式,我們完全可以跟據自己的需要來實現。
性能工具本身的影響
性能工具在監聽目標進程收集性能數據,本身就會有性能的開銷。比如增加log,注入后Hook相關函數等等。這些負面影響不可避免的,我們盡量將其影響減少。比如Log寫入文件會帶來IO開銷,我們就采用先將log寫入內存,當數據采集停止后一次性寫入文件等,并且在記錄內存開銷時減掉log所占用的內存。
總結
總之,開發自己的性能工具,首先要明確自己關注哪些性能點,然后在此基礎上確定所需要的數據;然后確定性能工具需要哪些功能,接著一步一步實現它就好了。最后別忘了跟據自己的需要持續改進。
原文轉自:http://www.uml.org.cn/Test/201302212.asp