安装依赖:
yum -y install perf.x86_64
git clone https://github.com/brendangregg/FlameGraph.git
将FlameGraph加入PATH:
export PATH=xxx/FlameGraph:$PATH
或
cp -r xxx/FlameGraph/* ~/bin/
录制函数调用取样数据:
perf record -e cpu-clock -F 每秒取样频次 -p 进程ID -g -- sleep 取样秒数
也可以根据进程名
perf record -e cpu-clock -F 每秒取样频次 -p `ps aux | grep '进程名' | grep -v 'grep' | awk '{print $2}'` -g -- sleep 取样秒数
如果是多线程程序可以指定录制的线程ID
perf record -e cpu-clock -F 每秒取样频次 -p 线程ID -g -- sleep 取样秒数
得到采样数据perf.data后再进行以下步骤:
perf script -i perf.data &> perf.unfold
stackcollapse-perf.pl perf.unfold &> perf.folded
flamegraph.pl perf.folded > perf.svg
将perf.svg用浏览器打开。
整理成脚本如下:
f [ "$1" == "" ]; then
echo “usage: $0 prog_name”
exit
fi
perf record -e cpu-clock -F 10000 -p `pidof $1` -g -- sleep 60
perf script -i perf.data &> perf.unfold
stackcollapse-perf.pl perf.unfold &> perf.folded
flamegraph.pl perf.folded > perf.svg
也可以通过perf命令实时查看top进程:
if [ "$1" == "" ]; then
echo “usage: $0 prog_name”
exit
fi
perf top -e cpu-clock -g -F 10000 -p `pgrep $1`
遇到的问题:
ERROR: No stack counts found
或者是权限问题,或者是采样率太低,可以更换root权限或提高采样率试试。
perf的采用率默认有上限,需要root权限修改系统配置:
临时修改:
echo 0 > /proc/sys/kernel/perf_cpu_time_max_percent
echo 10000 > /proc/sys/kernel/perf_event_max_sample_rate
持久修改:
root权限编辑 /etc/sysctl.conf 文件,添加:
kernel.perf_event_paranoid = -1
kernel.perf_cpu_time_max_percent = 0
然后执行 sysctl -p,立刻生效。