news 2026/5/10 17:54:35

使用 perf + FlameGraph 生成火焰图(Flame Graph)笔记

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
使用 perf + FlameGraph 生成火焰图(Flame Graph)笔记

使用 perf + FlameGraph 生成火焰图(Flame Graph)笔记

  • 使用 perf + FlameGraph 生成火焰图(Flame Graph)笔记
    • 一、什么是火焰图(Flame Graph)
      • 火焰图的核心含义
    • 二、整体流程概览
    • 三、准备环境
      • 1️⃣ 安装 perf
      • 2️⃣ 下载 FlameGraph 工具
    • 四、Step 1:使用 perf record 采样 CPU
      • perf 是什么?
      • 采样频率说明(99Hz)
      • 示例命令
      • 结束采样
    • 五、Step 2:解析 perf.data(perf script)
      • 输出说明
    • 六、Step 3:折叠调用栈(stack collapse)
      • 执行命令
      • 折叠后的格式
    • 七、Step 4:生成火焰图 SVG
    • 八、Step 5:分析火焰图
      • 打开方式
      • 关键分析技巧
        • 1️⃣ 找最宽的函数
        • 2️⃣ 看“平顶山”
        • 3️⃣ 从下往上看调用路径
        • 4️⃣ 使用搜索功能
    • 九、常见问题与建议
      • 1️⃣ 为什么一定要 `-g`?
      • 2️⃣ cpu-clock vs cycles
      • 3️⃣ 生产环境是否安全?
    • 十、总结

使用 perf + FlameGraph 生成火焰图(Flame Graph)笔记

参考项目: https://github.com/brendangregg/FlameGraph
适用场景:Linux 服务器 CPU 性能分析、热点函数定位、性能瓶颈排查


一、什么是火焰图(Flame Graph)

火焰图是一种CPU 采样分析可视化图表,用于直观展示:

  • 程序在CPU 上花时间最多的函数
  • 函数的调用栈关系
  • 哪些路径是性能瓶颈(Hot Path)

火焰图的核心含义

  • 横轴(X 轴):CPU 时间占比(越宽表示耗时越多)
  • 纵轴(Y 轴):调用栈深度(越高表示调用层级越深)
  • 颜色:仅用于区分函数,无实际性能含义

🔥 顶部最宽的“平顶”函数,往往就是性能瓶颈


二、整体流程概览

生成火焰图通常分为5 个步骤

  1. 使用perf record采集 CPU 采样数据
  2. 生成原始调用栈文本(perf script
  3. 折叠调用栈(stack collapse)
  4. 生成 SVG 火焰图
  5. 用浏览器分析火焰图

流程示意:

perf record ↓ perf.data ↓ perf script ↓ perf.unfold ↓ stackcollapse-perf.pl ↓ perf.folded ↓ flamegraph.pl ↓ xxx.svg

三、准备环境

1️⃣ 安装 perf

perf是 Linux 内核自带工具(kernel tools),执行perf --version查看版本,若不存在perf命令,则执行如下命令进行安装:

yuminstall-y perf# 或dnfinstall-y perf

确认版本:

perf --version

2️⃣ 下载 FlameGraph 工具

gitclone https://github.com/brendangregg/FlameGraph.gitcdFlameGraph

主要会用到两个脚本:

  • stackcollapse-perf.pl
  • flamegraph.pl

四、Step 1:使用 perf record 采样 CPU

perf 是什么?

perfLinux 原生性能分析工具(performance 的缩写),可以:

  • 采集 CPU 正在执行的函数
  • 记录函数调用栈(stack trace)
  • 通过采样方式分析性能开销

采样频率说明(99Hz)

默认情况下:

  • 每秒采样 99 次(99Hz)
  • 如果 99 次采样都命中同一个函数
  • 说明这一秒 CPU 几乎都在执行这个函数 👉 很可能是性能瓶颈

示例命令

perf record -e cpu-clock -g -p28591--sleep60

参数解释:

参数含义
-e cpu-clock以 CPU 时钟作为采样事件(通用、稳定)
-g记录调用栈(非常关键)
-p 28591指定进程 PID(主 DN 进程号)
sleep 60持续采样 60 秒

⏱ 一般30~60 秒就足够定位 CPU 热点

结束采样

  • 采样期间可以Ctrl + C提前结束
  • 当前目录会生成文件:
perf.data

五、Step 2:解析 perf.data(perf script)

使用perf script将二进制采样数据转换为文本调用栈:

perf script -i perf.data&>perf.unfold

输出说明

  • perf.unfold中包含:

    • 每一次采样的
    • 完整函数调用栈(从栈顶到栈底)

示例(简化):

java Interpreter JVM_Invoke syscall

六、Step 3:折叠调用栈(stack collapse)

火焰图要求将相同调用路径进行合并统计

执行命令

./stackcollapse-perf.pl perf.unfold&>perf.folded

折叠后的格式

main;foo;bar 120 main;foo;baz 30

含义:

  • main → foo → bar这条调用路径
  • 被采样120 次

七、Step 4:生成火焰图 SVG

./flamegraph.pl perf.folded>cn.svg

生成结果:

  • cn.svg:标准火焰图文件

八、Step 5:分析火焰图

打开方式

  • 直接用浏览器打开:
cn.svg

关键分析技巧

1️⃣ 找最宽的函数
  • 宽度 = CPU 时间占比
  • 越宽,越值得优化
2️⃣ 看“平顶山”
  • 火焰图顶部的一大片函数
  • 往往是性能瓶颈最终落点
3️⃣ 从下往上看调用路径
  • 底部:入口函数(如 main / 线程函数)
  • 顶部:最终耗 CPU 的函数
4️⃣ 使用搜索功能
  • 点击右上角 🔍
  • 输入函数名 / 模块名

九、常见问题与建议

1️⃣ 为什么一定要-g

  • 没有-g→ 只能看到函数耗时
  • -g→ 才能看到调用链(根因分析)

2️⃣ cpu-clock vs cycles

事件说明
cpu-clock与 CPU 频率无关,推荐
cycles与硬件相关,受频率影响

👉通用分析优先用cpu-clock

3️⃣ 生产环境是否安全?

  • perf 属于采样分析
  • 对性能影响很小(通常 <5%)
  • 适合线上问题定位(建议短时间)

十、总结

一句话总结:

perf 负责采样,FlameGraph 负责可视化,火焰图让 CPU 热点一眼可见。

核心命令回顾:

perf record -e cpu-clock -g -p<PID>--sleep60perf script -i perf.data&>perf.unfold ./stackcollapse-perf.pl perf.unfold&>perf.folded ./flamegraph.pl perf.folded>result.svg

若有转载,请标明出处:https://blog.csdn.net/CharlesYuangc/article/details/157093811

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/5/2 11:24:14

python自助健身房智能管理系统

目录自助健身房智能管理系统摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;自助健身房智能管理系统摘要 自助健身房智能管理系统通过物联网技术与人工智能算法&#xff0c;实现健身场所…

作者头像 李华
网站建设 2026/5/10 15:05:25

基于大数据的校园网用户行为分析系统的设计与实现_58431u18

目录摘要关键词开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 校园网作为高校信息化建设的重要组成部分&#xff0c;积累了海量用户行为数据。设计并实现基于大数据的校园网用户行为分…

作者头像 李华
网站建设 2026/5/10 5:36:32

金融风控平台如何通过百度富文本编辑器导入Word带图表格?

咱安徽程序员实锤了&#xff01;最近接了个CMS外包活&#xff0c;客户是做企业官网的&#xff0c;非要给后台新闻编辑器加“文档导入Word一键粘贴”功能——好家伙&#xff0c;需求单写着“要保留Word里的花里胡哨样式&#xff0c;图片、公式、甚至MathType的鬼画符都得给我原模…

作者头像 李华
网站建设 2026/5/10 0:51:53

基于三菱PLC的电烤箱温度系统(设计源文件+万字报告+讲解)(支持资料、图片参考_相关定制)_文章底部可以扫码

基于三菱PLC的电烤箱温度系统(设计源文件万字报告讲解)&#xff08;支持资料、图片参考_相关定制&#xff09;_文章底部可以扫码 基于三菱PLC的电烤箱温度系统 摘要&#xff1a; 随着社会的不断发展&#xff0c;人们改造自然的能力也在不断的提高。机械技术的发明和使用&#x…

作者头像 李华
网站建设 2026/5/7 20:46:52

如何借助AI写好论文中的“前人工作”与“现有问题”?用ChatGPT提供全新思路颠覆认知,实测有效,直接使用

我们在写学术论文时,“前人工作”和“现有问题”这两个部分实际上至关重要,前者可以为我们的研究提供夯实的基础,后者则可以借机展示研究价值和创新点。怎么写好这两部分,既要准确反映前人成果,又要凸显研究意义以及创新呢? 七哥经常指导同仁写学术论文,总结出一些借助…

作者头像 李华
网站建设 2026/5/1 10:21:48

【开题答辩全过程】以 基于SSM框架的网上书城系统设计与实现为例,包含答辩的问题和答案

个人简介一名14年经验的资深毕设内行人&#xff0c;语言擅长Java、php、微信小程序、Python、Golang、安卓Android等开发项目包括大数据、深度学习、网站、小程序、安卓、算法。平常会做一些项目定制化开发、代码讲解、答辩教学、文档编写、也懂一些降重方面的技巧。感谢大家的…

作者头像 李华