1 分析流程简介
Linux上的应用程序的性能可能不满足我们的期望,我们可以通过很多方式去对程序进行性能优化,但是首先要找到程序的性能热点,即哪个函数或处理最消耗性能。这里我们采用Perf工具+FlameGraph工具的组合来找到程序的性能热点。
2 工具安装
2.1 Perf
Linux系统自带工具,一般不需要安装。
如果没有,可以通过下面的方式安装:
yum -y install perf
安装检查一下:
perf --help
2.2 FlameGraph
github仓库地址如下:
https://github.com/brendangregg/FlameGraph
直接clone下来即可。
3 编译目标程序
无论使用make还是cmake,编译目标程序时要加上下面这个编译选项:
-Og -ggdb -g3 -fno-omit-frame-pointer -fno-inline -fno-inline-small-functions
4 开启Perf记录perf.data
4.1 针对进程记录perf.data
perf record -ag -g -call-graph fp -p xxxx
xxxx 为进程id
4.2 针对线程记录perf.data
perf record -ag -g -call-graph fp -t xxxx
xxxx 为线程id
4.3 结束Perf记录
Ctrl+c
5 使用FlameGraph生成火焰图
在执行perf的目录下(perf.data同级目录):
perf script | perl FlameGraph/stackcollapse-perf.pl | perl FlameGraph/flamegraph.pl > out.svg
out.svg就是我们要的火焰图
6 根据火焰图分析性能热点
火焰图上体现出每个函数的cpu时间占比,通过发现占比大的函数找到性能的热点。