perf及火焰圖的使用,效能分析

ivalue2333發表於2018-09-14

1:perf

perf是一個效能分析工具,

systemtap是一個執行時程式或系統資訊採集工具,使用前需要了解其動態追蹤語言,(瞭解動態追蹤:https://blog.csdn.net/wm_1991/article/details/51982617), systemtap功能強大,但是學習成本也高,用於分析複雜問題。

 

2:perf下載

https://centos.pkgs.org/

下載系統對應版本rpm的二進位制檔案包,很方便安裝。

 

3:perf使用

A:資訊採集

sudo perf record -e cpu-clock -g -p PID

-g 選項是告訴perf record額外記錄函式的呼叫關係

-e cpu-clock 指perf record監控的指標為cpu週期

-p 指定需要record的程式pid

 

B:資訊解析

sudo perf script -i perf.data > perf.unfold

 

4:解析出來的檔案其實也不夠直觀,這是可以使用火焰圖生成工具,這裡做出來的是on-cpu火焰圖

火焰圖git: https://github.com/brendangregg/FlameGraph

 

C:資訊摺疊

sudo ./FlameGraph/stackcollapse-perf.pl perf.unfold > perf.folded

 

D:生成火焰圖

sudo ./FlameGraph/flamegraph.pl perf.folded > perf.svg

 

5:火焰圖的含義

火焰圖是基於 stack 資訊生成的 SVG 圖片, 用來展示 CPU 的呼叫棧。

y 軸表示呼叫棧, 每一層都是一個函式. 呼叫棧越深, 火焰就越高, 頂部就是正在執行的函式, 下方都是它的父函式.

x 軸表示抽樣數, 如果一個函式在 x 軸佔據的寬度越寬, 就表示它被抽到的次數多, 即執行的時間長. 注意, x 軸不代表時間, 而是所有的呼叫棧合併後, 按字母順序排列的.

火焰圖就是看頂層的哪個函式佔據的寬度最大. 只要有 “平頂”(plateaus), 就表示該函式可能存在效能問題。

顏色沒有特殊含義, 因為火焰圖表示的是 CPU 的繁忙程度, 所以一般選擇暖色調.

 

 

6:火焰圖使用

火焰圖是 SVG 圖片, 可以與使用者互動.

滑鼠懸浮

火焰的每一層都會標註函式名, 滑鼠懸浮時會顯示完整的函式名、抽樣抽中的次數、佔據總抽樣次數的百分比

點選放大

在某一層點選,火焰圖會水平放大,該層會佔據所有寬度,顯示詳細資訊。

左上角會同時顯示 “Reset Zoom”, 點選該連結, 圖片就會恢復原樣.

搜尋

按下 Ctrl + F 會顯示一個搜尋框,使用者可以輸入關鍵詞或正規表示式,所有符合條件的函式名會高亮顯示.

 

參考:

https://blog.csdn.net/gatieme/article/details/78885908

http://www.ruanyifeng.com/blog/2017/09/flame-graph.html

https://github.com/brendangregg/FlameGraph

 

擴充套件,高效能除錯經驗分享—來源:知乎

https://zhuanlan.zhihu.com/p/21348220

相關文章