火焰图介绍
火焰图(Flame Graph)是一种用于可视化软件性能剖析数据的工具,它提供了一种直观的方式来理解代码的执行时间和调用关系。由Brendan Gregg首次提出,并成为分析性能问题的强大工具。
读懂火焰图
X轴:有多个方块组成,一个方块代表一个函数函数,在x轴占的宽度越宽,表示他被采样到的次数越多,可以简单的粗暴的近似理解为执行时间Y轴:表示函数调用栈,调用栈越深,火焰就越高顶部是CPU正在执行的函数,下方都是他的父函数


什么时候使用 On-CPU 火焰图? 什么时候使用 Off-CPU 火焰图呢?
取决于当前的瓶颈到底是什么:
如果是 CPU 则使用 On-CPU 火焰图,(先看cpu是不是快到百分百),
如果是 IO 或锁则使用 Off-CPU 火焰图(如果cpu占用率不高,就需要用off-cpu).
如果无法确定, 那么可以通过压测工具来确认:
通过压测工具看看能否让 CPU 使用率趋于饱和, 如果能那么使用 On-CPU 火焰图
如果不管怎么压, CPU 使用率始终上不来, 那么多半说明程序被 IO 或锁卡住了, 此时适合使用 Off-CPU 火焰图.
ON-CPU的示例代码:


火焰图生成的三个步骤
采集堆栈折叠堆栈
生成火焰图
Perf
perf是Linux操作系统下的 是Linux的一款性能分析工具,能够进行函数级和指令级的热点查找,可以用来分析程序中热点函数的CPU占用率,从而定位性能瓶颈。
是通过在系统内核中注册一个事件监听器,然后在程序运行时收集相关的事件和数据。具体来说,它利用硬件性能计数器来捕捉一系列事件,包括CPU的缓存命中率、指令和数据的缓存命中率、缓存竞争情况、跟踪程序的函数调用及其参数、系统调用等。
Perf的命令
record:将所有的分析记录进perf.data
report :读取perf record创建的数据文件,并给出热点分析结果
script:读取数据文件中的数据信息
一、采集堆栈
perf record -F 99 -a -g -- sleep 60 (-p 111)-F 99:
表示每秒采集99次
-a:
对所有 CPU 进程进行采样
-p 111:
是进程号,即对哪个进程进行分析
-g:
表示记录调用栈
sleep 60
则是持续60秒
执行60秒后会提示表示采集完成,在当前目录会生成一个perf.data的文件
二、折叠堆栈
perf script | ./stackcollapse-perf.pl > out.perf-foldedperf script 是 perf 工具的一个子命令,用于将 perf 收集的事件数据转化为可读的格式。
它调用了一个 Perl 脚本 stackcollapse-perf.pl。
这个脚本用于折叠(合并)函数调用栈的样本,以便它们可以更容易地在火焰图中表示。
输出为out.perf-folded
三、生成火焰图
./flamegraph.pl out.perf-folded > perf.svg它调用了一个 Perl 脚本 flamegraph.pl。
这个脚本用于生成火焰图,这是一种可视化函数调用栈的图形表示。
输入是 out.perf.folded 文件,输出是 SVG 格式的火焰图。
tips:
火焰图下载 https://github.com/brendangregg/FlameGraph
安装perf yum install perf
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




