perf + 火焰图分析软件性能

软件的性能分析,往往需要查看CPU耗时,了解瓶颈在哪里

1 安装perf 和 flamegraph

Ubuntu上通过源码安装perf:

// 安装必要的依赖项:
sudo apt-get install build-essential libelf-dev libunwind-dev

// 从官方网站下载perf源代码:
wget https://mirrors.edge.kernel.org/pub/linux/kernel/tools/perf/perf-<version>.tar.gz

//解压缩下载的文件:
tar -xzvf perf-<version>.tar.gz

//进入解压后的目录:
cd perf-<version>

// 编译并安装perf:
make
sudo make install

// 检查perf是否成功安装:
perf --version

flamegraph不需要安装,直接下载源码就可以使用其提供的脚本

https://github.com/brendangregg/FlameGraph

2 如何生成火焰图

// 1 检测进程
sudo perf record -F 99 pid -g -- sleep 30
对进程ID为181的进程进行采集,采集时间为60秒
执行期间不要退出上述代码中perf record表示记录,-F 99表示每秒99-p 13204是进程号,即对哪个进程进行分析,-g表示记录调用栈,sleep 30则是持续30秒
执行完这行指令后,会自动生成perf.data文件

// 2 解析数据
sudo perf script -i perf.data & > perf.unfold

// 3 符号进行折叠
./stackcollapse-perf.pl perf.unfold &> perf.folded

// 4 生成svg图
./flamegraph.pl perf.folded > perf-$(date +%Y%m%d-%H:%M:%S).svg

在 Flamegraph 生成的火焰图中,每个矩形代表一个函数,矩形的宽度表示该函数占用 CPU 时间的比例,矩形的高度表示函数调用的深度

3 火焰图

火焰图是svg图片,可以与用户互动。
(1)鼠标悬浮
火焰的每一层都会标注函数名,鼠标悬浮时会显示完整的函数名、抽样抽中的次数、占据总抽样次数的百分比。下面是一个例子。

(2)点击放大
在某一层点击,火焰图会水平放大,该层会占据所有宽度,显示详细信息。

在 Flamegraph 生成的火焰图中,search 和 ic(inverted call tree)是两个非常有用的功能。

search 按钮可以用于在火焰图中搜索特定的函数或代码段。点击 search 按钮后,输入要搜索的函数或代码段的名称,即可在火焰图中定位到该函数或代码段的位置。这个功能非常方便,可以帮助用户快速地定位到感兴趣的函数或代码段。
ic(inverted call tree)按钮可以用于生成倒置的调用树。在默认情况下,Flamegraph 生成的是正常的调用树,即从上到下表示函数调用的层级关系。而倒置的调用树则是从下到上表示函数调用的层级关系。这个功能可以帮助用户更好地理解函数之间的调用关系,从而更好地进行性能分析和优化。

猜你喜欢

转载自blog.csdn.net/weixin_42445727/article/details/130682857