利用perf及FlameGraph生成火焰图

利用perf及FlameGraph生成火焰图

使用之前

如果普通用户使用perf分析程序性能的话,需要将perf_event_paranoid的等级降低。默认是3。

perf_setting

也可以直接使用root权限去运行,但是感觉一般不要随便用root权限去运行东西。

经过实验,发现只需要将perf_event_paranoid的等级设置到1,普通用户即可开启追踪。通过以下命令来设置,/proc/sys/AAA/BBB_ccc的变量都可以通过sysctl AAA.BBB_CCC=XXX的形式设置。

sudo sysctl kernel.perf_event_paranoid=1

注意:本文只介绍如何从函数调用出发生成函数调用火焰图。但是perf的功能远不止函数调用。他还能分析程序运行过程的cache miss以及其它特殊事件,例如跨区访问等。

perf stat可以直接在命令行里面查看程序运行的信息。

perf list可以查看支持的-e event类型。

运行perf记录程序

perf record -F 99 -p 181 -g -- sleep 60 #或者
perf record -F 99 -g your_process

-F 99: 每秒采样99次
-p PID: 指定进程id
-g: 记录调用栈
sleep 60: 持续60秒, 如果不加则一直采样到手动中断(CRTL+C)为止
上面的命令会生成一个perf.data的文件.

perf的运行原理简单概括就是给定一个采样频率,根据采样频率每隔一段时间对CPU进行一次中断并根据记录的程序符号表得到当前运行的函数。最后如果某个函数被抽样的次数越多,代表这个函数运行时间越长。

使用perf record运行之后,会在当前目录下面生成一个perf.data文件。

之后执行perf report -n可以生成报告的预览。

执行perf script > out.perf可以 dump 出 perf.data 的内容。

生成火焰图

火焰图生成的脚本来自开源项目FlameGraph,FlameGraph能够将函数调用关系以及占用时间通过svg格式的矢量图表示出来,因其形状像火焰又叫“火焰图”。

火焰图样例:
在这里插入图片描述

注意:火焰图上面的顺序并不是函数执行的顺序,是统计之后重新编排的顺序

在GitHub上面下载FlameGraph项目:

git clone https://github.com/brendangregg/FlameGraph.git

执行./stackcollapse-perf.pl out.perf > out.folded折叠调用栈。

执行./flamegraph.pl out.folded > perf.svg生成火焰图。

调用脚本

自己写了一个perf2svg的调用脚本,将stackcollapse-perf.pl和flamegraph.p两个文件拷贝到/usr/local/bin目录,然后将perf2svg.sh放到/usr/local/bin目录就能使用perf2svg.sh command生成火焰图了。

脚本地址: https://gitee.com/xiaobai_Lee/perf2svg

参考文章

Perf:Linux下性能分析工具 https://juejin.im/post/6854573211699380238

在Linux下做性能分析3:perf https://zhuanlan.zhihu.com/p/22194920

使用perf和火焰图分析系统性能 https://codertang.com/2018/12/17/perf/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值