暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

火焰图(最好用的性能分析工具)

原创 铁头娃学数据库 2025-10-11
95

火焰图介绍

火焰图(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-folded

perf 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进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论