linux perf工具使用 📅 2026/8/18 19:16:07 linux perf工具生成火焰图注意这个脚本依赖编译程序时启用帧指针也就是CMakeLists.txt的CMAKE_CXX_FLAGS和CMAKE_C_FLAGS中添加-fomit-frame-pointer如果项目中不让启用帧指针那就修改perf record -a -g -p pid为perf record --call-graph dwarf,65528 -p pid修改sudo PerfPath/perf script out.perf为sudo PerfPath/perf script --no-inline out.perf。#!/bin/bash cd $( cd $( dirname $0 ) pwd ) # sudo passwd echo 123 | sudo -S service runtime* status PerfPath/usr/lib/linux-tools/$(uname -r) if [ ! -d $PerfPath ]; then sudo apt-get install linux-tools-$(uname -r) fi if [ ! -f $PerfPath/perf ]; then echo Perf path error exit 0 fi FlameGraph_PATH/home/master/FlameGraph if [ ! -d $FlameGraph_PATH ]; then echo -e FlameGraph path error exit 0 fi precise_waiting() { if [ $? -ne 0 ]; then echo $1 ERROR exit 0 fi while ps -ef | grep $1 | grep -v grep; do sleep 1 continue done } do_Log() { if [ -f $2 ]; then echo $1 finish else echo $1 ERROR exit 0 fi } PIDps -aux | grep TestProject | grep -v grep | awk {print $2} if [ ! -n $PID ]; then echo TestProject not running exit 0 fi echo TestProject PID:$PID # st1 sudo $PerfPath/perf record -a -g -p $PID precise_waiting sudo perf record do_Log record perf.data # st2 sudo $PerfPath/perf script out.perf precise_waiting sudo perf script do_Log script out.perf # st3 $FlameGraph_PATH/stackcollapse-perf.pl out.perf out.folded precise_waiting stackcollapse do_Log stackcollapse out.folded # st4 $FlameGraph_PATH/flamegraph.pl out.folded TestProject-$PID.svg precise_waiting flamegraph do_Log flamegraph TestProject-$PID.svg sudo rm out.folded out.perf perf.data