VisualStudio自帶性能分析功能Diagnostics,但有時使用還是有局限,這時就需要Windows平臺下的性能分析神器PerfView出場了,
1.PerfView下載
microsoft/perfview

2.PerfView使用
PerfView可以對計算機的CPU、記憶體等各類資源的使用情況進行監控,
下載PerfView.exe,雙擊運行,

點擊“Collect>Collect”,可以看到采樣界面,

可以將CPU的時鐘采樣間隔改為0.125,這樣能得到更詳細的采樣結果,點擊“Start Collection”按鈕開始采集,同時啟動并發請求,記錄并發請求期間的堆疊呼叫情況,并發請求結束后停止采樣,PerfView會自動壓縮采樣日志檔案,

PerfView采集的日志還是很全面的,包括CPU堆疊、行程堆疊、磁盤IO堆疊、記憶體堆疊等,雙擊“CPU Stacks”可以看到采集到的所有行程,由于結果記錄的是計算機運行的所有結果,只篩選需要行程進行查看,

選擇“Flame Graph”查看這兩個行程CPU資源占用的火焰圖,可以看出在采樣時間段內,兩個行程在多并發條件下使用多執行緒進行處理,每個執行緒所消耗的時間能很清楚的看到,
3.火焰圖使用
火焰圖是基于 perf 結果產生的 SVG 圖片,用來展示 CPU 的呼叫堆疊,
y 軸表示呼叫堆疊,每一層都是一個函式,呼叫堆疊越深,火焰就越高,頂部就是正在執行的函式,下方都是它的父函式,
x 軸表示抽樣數,如果一個函式在 x 軸占據的寬度越寬,就表示它被抽到的次數多,即執行的時間長,注意,x 軸不代表時間,而是所有的呼叫堆疊合并后,按字母順序排列的,
火焰圖就是看頂層的哪個函式占據的寬度最大,只要有"平頂"(plateaus),就表示該函式可能存在性能問題 ,
顏色沒有特殊含義,因為火焰圖表示的是 CPU 的繁忙程度,所以一般選擇暖色調,
舉個例子:

上面圖片中,最頂層的函式g()占用 CPU 時間最多,d()的寬度最大,但是它直接耗用 CPU 的部分很少,b()和c()沒有直接消耗 CPU,因此,如果要調查性能問題,首先應該調查g(),其次是i(),
另外,從圖中可知a()有兩個分支b()和h(),這表明a()里面可能有一個條件陳述句,而b()分支消耗的 CPU 大大高于h(),
我們可以將PerfView的采集日志匯出為speed scope型別的json檔案,通過speedscope網站(https://www.speedscope.app/)打開可以看到更詳細的火焰圖,speedscope的火焰圖是倒著看的,
speedscope
將上一步的PerfView日志匯出后在SpeedScope打開的效果如下:

可以很清楚的看到每個方法的呼叫情況,包括邏輯關系、使用時長等,
有了PerfVeiw和SpeedScope兩大工具的輔助,對于性能問題的分析就可以更深一步了,
磨刀不誤砍柴工
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/299620.html
標籤:其他
