perf 是 linux 系统调试工具之一,可以以一定采样频率 (默认 4000Hz) 监测指定进程中函数运行情况,从而分析程序的性能瓶颈,进而针对性优化。
工具安装
perf 并不是 linux 系统默认自带的,需要安装 linux-tools 工具集,比如:
sudo apt install linux-tools-common linux-tools-generic linux-tools-`uname -r`
或者自己从源码编译:
sudo apt install build-essential git flex bison
git clone --depth 1 https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
cd linux/tools/perf
make
sudo cp perf /usr/bin
如果你的系统内核自己升级过,那就只能从源码编译,因为 apt 源只有当前系统默认内核的 linux-tools-xxx
perf 使用方法
首先需要把被测试的程序跑起来,并获得其 PID,假设程序名为 my_awesome_app,则获取 PID 的命令为:
MY_PID=$(ps -ef | grep my_awesome_app | grep -v 'grep' | awk '{print $2}')
然后启动 perf 监测:
perf record -F 4000 -g -p $MY_PID -- sleep 80
其中 -F <freq> 指定采样频率,-g 表示记录函数调用栈,-p <PID> 指定被监测的 PID,-- sleep <secs> 指定监测时长,具体请查看 perf record --help
perf 监测后会在当前路径生成 perf.data 文件,执行 perf report -n --stdio 会读取 perf.data 并将结果展示在终端。
火焰图
perf report 分析性能还是很不方便,可以转换成火焰图来查看,工具地址:FlameGraph,具体使用方法仓库里已经写的很清楚了。
参考资料
|