具體的步驟參見這里:
《flame graph:圖形化perf call stack數據的小工具》
使用SystemTap腳本制作火焰圖,內存較少時,分配存儲采樣的數組可能失敗,需要編寫腳本,還要安裝kernel的debuginfo包。使用perf的話,相對來說要簡單一些。不過在有kernel的debuginfo包的時候,采樣顯示的信息要更豐富一些。
為了使用perf制作火焰圖方便,我編寫了下面的腳本,貼上來備忘,也方便需要的人。
腳本如下:
if [ $
# -ne 1 ];then
echo "Usage: $0 seconds"
exit 1
fi
perf record -a -g -o perf.data &
PID = ` ps aux | grep "perf record" | grep -v grep | awk '{print $2}' `
if [ -n "$PID" ]; then
sleep $ 1
kill -s INT $PID
fi
# wait until perf exite
sleep 1
perf script -i perf.data & > perf.unfold
perl stackcollapse -perf.pl perf.unfold & > perf.folded
perl flamegraph.pl perf.folded >perf.svg
echo "Usage: $0 seconds"
exit 1
fi
perf record -a -g -o perf.data &
PID = ` ps aux | grep "perf record" | grep -v grep | awk '{print $2}' `
if [ -n "$PID" ]; then
sleep $ 1
kill -s INT $PID
fi
# wait until perf exite
sleep 1
perf script -i perf.data & > perf.unfold
perl stackcollapse -perf.pl perf.unfold & > perf.folded
perl flamegraph.pl perf.folded >perf.svg
將上面的腳本保存為perf_flame_graph.sh。根據上面的Usage可以看出在執行的時候,只需要指定采樣的時間,單位為秒。
下面是我在測試機上制作的火焰圖:

我這里制作的火焰圖沒有指定具體的進程或線程,如果只想關注某個具體的進程,可以在pref record命令后面加上命令或者通過-p選項指定進程ID。更多的參數和選項參見man perf-record。
