轉自:https://www.cnblogs.com/linhaostudy/p/16098864.html
正文
1、perf命令簡要介紹
1.1 perf採集數據
讓我們從 perf 命令(performance 的縮寫)講起, 它是 Linux 系統原生提供的性能分析工具, 會返回 CPU 正在執行的函數名以及調用棧(stack)
perf record -F 99 -p 3887 -g -- sleep 30
-F 指定採樣頻率爲 99Hz(每秒99次), 如果 99次 都返回同一個函數名, 那就說明 CPU 這一秒鐘都在執行同一個函數, 可能存在性能問題.
perf record 表示採集系統事件, 沒有使用 -e 指定採集事件, 則默認採集 cycles(即 CPU clock 週期), -F 99 表示每秒 99 次, -p 13204 是進程號, 即對哪個進程進行分析, -g 表示記錄調用棧, sleep 30 則是持續 30 秒.
1.2 perf report
perf report -n --stdio
2、 生成火焰圖
首先用 perf script 工具對 perf.data 進行解析
# 生成摺疊後的調用棧
perf script -i perf.data &> perf.unfold
將解析出來的信息存下來, 供生成火焰圖
首先用 stackcollapse-perf.pl 將 perf 解析出的內容 perf.unfold 中的符號進行摺疊 :
Brendan D. Gregg 的 Flame Graph 工程實現了一套生成火焰圖的腳本.
Flame Graph 項目位於 GitHub上
https://github.com/brendangregg/FlameGraph
# 生成火焰圖
./stackcollapse-perf.pl perf.unfold &> perf.folded
最後生成 svg 圖
./flamegraph.pl perf.folded > perf.svg
我們可以使用管道將上面的流程簡化爲一條命令
perf script | FlameGraph/stackcollapse-perf.pl | FlameGraph/flamegraph.pl > process.svg
如果您覺得閱讀本文對您有幫助,請點一下“推薦”按鈕,您的“推薦”將是我最大的寫作動力!