flamegraph(火焰圖)效能分析
阿新 • • 發佈:2020-10-26
使用perf工具以及flamegraph可以將除錯的程式執行棧以及在每個函式中停留的時間以火焰圖的形式展現出來。
perf工具可以在核心原始碼tools/perf中編譯安裝。
make && make install
flamegraph工具可以再github中下載:
git clone https://github.com/brendangregg/FlameGraph.git
本文以除錯一個httpd程式的過程介紹生成火焰圖的方法:
首先,我們需要使用perf工具抓取我們的程式執行時的棧情況。perf的原理就是在程式執行時對程式進行取樣,以一定頻率抓取程式執行棧,出現頻率高的函式棧路徑自然耗時就高。預設perf採集的資料儲存在當前目錄中的perf.data中。
執行要除錯的httpd程式。
./myhttpd
找到剛剛執行的httpd的PID。
ps -ef | grep myhttpd
這時候可以對httpd進行壓測,不然httpd一直阻塞在epool_wait中,我使用的wrk壓測工具。
cd /path/to/wrk ./wrk -t4 -d60s http://127.0.0.1:2019
開始壓測後使用perf抓取資料。
perf record -g -F 99 -p pid -- sleep 60
抓取資料之後,我們可以發現當前目錄下存在perf.data檔案。還需要匯出可讀性檔案。
perf script > httpd.perf
這時可以使用perf檢視抓取的資料。
perf report perf.data
資料已經準備好,使用flamegraph工具即可對資料進行處理生成火焰圖。
先對資料進行預處理:
/path/to/FlameGraph/stackcollapse-perf.pl httpd.perf > httpd.folded
再生成火焰圖:
/path/to/FlameGraph/flamegraph.pl httpd.folded > httpd.svg
使用瀏覽器開啟httpd.svg。
點選函式還可以放大向下檢視棧幀: