如何使用 perf命令 和火焰图进行系统级分析

linux内存分析工具-perf和火焰图

什么是perf

perf是linux环境下一个性能分析工具,它可以用于在Linux操作系统上进行系统性能分析和调优。它提供了一组命令行工具和API,可以监测系统的各种硬件和软件事件,并收集相关的性能数据。

使用Linux perf,你可以进行以下操作:

性能计数器:perf可以监测CPU的各种硬件性能计数器,如指令执行数、缓存命中率、分支预测情况等,用于分析程序的CPU消耗和性能瓶颈。

Tracepoints:通过在内核和用户空间的关键位置插入tracepoints,perf可以跟踪程序的执行流程,帮助定位性能问题。

基于事件的采样分析:perf可以基于硬件中断或特定事件(如函数调用、指令执行、缓存失效等)发生时进行采样,从而收集到发生这些事件时的调用栈数据,用于分析程序的热点函数和调用关系。

动态追踪:perf可以监测指定的函数或指令,以及它们的参数和返回值,用于对程序进行动态分析和跟踪。

火焰图:利用perf生成的调用栈数据,可以使用专门的工具(如FlameGraph)生成火焰图,直观地展示程序的函数调用关系和消耗情况。

火焰图

火焰图是基于 perf 结果产生的 SVG 图,用来展示 CPU 的调用栈。
工具下载,这些脚本不需要编译

wget https://github.com/brendangregg/FlameGraph/archive/master.zip
unzip master.zip

具体流程

1、在终端中运行perf命令收集程序的性能数据,这将启动perf工具,并以采样方式记录指定进程的函数调用信息。PID 就是对应程序的进程ID

perf record -g -p <pid>

2、运行完程序后,使用perf report命令生成报告,这将生成一个包含性能数据分析结果的报告。

perf report --stdio

3、将报告导出为文本文,这将把perf report的输出保存到perf.data文件中。

perf script > perf.data

4、以下命令使用Flame Graph脚本将perf.data转换成火焰图,这将使用stackcollapse-perf.pl脚本将perf.data转换成折叠文件(perf.folded),然后使用flamegraph.pl脚本将折叠文件转换成火焰图(perf.svg)。

$ stackcollapse-perf.pl perf.data > perf.folded
$ flamegraph.pl perf.folded > perf.svg

5、打开perf.svg文件,即可查看生成的火焰图,分析程序的性能瓶颈和函数调用关系。

结果分析

以下是一个示例:

  1. 纵轴表示调用栈,每一层都是一个函数,也是其上一层的父函数,最顶部就是采样时正在执行的主函数,调用栈越深,火焰就越高。
  2. 横轴表示抽样数,并不是表示执行时间。若一个函数的宽度越宽,则表示它被抽到的次数越多,表示该函数占用CPU比例越高,需要优化。
  3. 所有调用栈会在汇总后,按字母序列排列在横轴上。

在这里插入图片描述
在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值