使用 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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/1178470.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度测评10个AI论文写作软件,研究生高效写作必备!

深度测评10个AI论文写作软件&#xff0c;研究生高效写作必备&#xff01; AI 工具如何助力论文写作&#xff1f;这些功能你不可不知 在当今学术研究日益激烈的环境下&#xff0c;研究生们面临着越来越高的论文写作要求。无论是开题报告、文献综述&#xff0c;还是实验分析和结论…

基于深度学习和熔池图像对的焊缝熔透状态识别【附代码】

✅ 博主简介&#xff1a;擅长数据搜集与处理、建模仿真、程序设计、仿真代码、论文写作与指导&#xff0c;毕业论文、期刊论文经验交流。✅成品或者定制&#xff0c;扫描文章底部微信二维码。(1) 双棱镜单摄像机被动立体视觉系统的设计与熔池图像采集熔化极气体保护焊接过程中&…

导入自己的听歌时长数据,统计每周听歌总时长,输出音乐风格偏好分析。

1. 实际应用场景描述场景某音乐爱好者使用音乐平台听歌&#xff0c;并导出自己的听歌记录&#xff08;日期、歌曲名、歌手、音乐风格、听歌时长&#xff09;。他希望&#xff1a;- 统计每周听歌总时长- 分析音乐风格偏好- 根据数据调整歌单&#xff0c;发现更多喜欢的音乐痛点-…

python基于Web技术的智能养老管理系统

目录基于Web技术的智能养老管理系统摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;基于Web技术的智能养老管理系统摘要 随着人口老龄化加剧&#xff0c;传统养老模式面临资源分配不均、…

python基于大数据文化产业发展智能分析系统

目录基于大数据文化产业发展智能分析系统的摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;基于大数据文化产业发展智能分析系统的摘要 随着文化产业的快速发展&#xff0c;大数据技术成…

MySQL面试中,锁机制必问的5大问题!

文章目录MySQL中有哪几种锁&#xff1f;引言&#xff1a;为什么我们要聊锁&#xff1f;第一部分&#xff1a;MySQL中的锁类型1. 表级锁&#xff08;Table Lock&#xff09;示例&#xff1a;MyISAM 表的表级锁配置建议2. 行级锁&#xff08;Row Lock&#xff09;示例&#xff1a…

Questions for the Technical Advisory Board - 2

Elections 选举 Williams then posed a question to his fellow TAB members: with the (recently closed) TAB election, what do they want to see next year? What should the TAB be looking at? And for the non-TAB audience members: what conversations can the TAB…

前馈/反馈控制是什么

前馈/反馈控制是什么 在航天工程中&#xff0c;卫星姿态控制系统&#xff08;Attitude Control System, ACS&#xff09;是确保卫星正确指向、稳定运行和完成任务的核心子系统。无论是对地观测卫星精确对准地球表面&#xff0c;还是通信卫星将天线指向地面站&#xff0c;亦或是…

2025年市面上有实力的尘埃粒子计数器源头厂家排行榜,在线式粒子计数器/尘埃粒子检测仪供应厂家电话 - 品牌推荐师

随着工业4.0与智能制造的深度推进,洁净环境监测需求呈现爆发式增长。尘埃粒子计数器作为洁净车间、半导体制造、生物医药等领域的核心检测设备,其技术精度与稳定性直接影响生产质量与合规性。然而,市场鱼龙混杂,部…

2025年市场技术好的楼板搭建公司推荐,现浇楼梯/楼板现浇/钢筋混凝土现浇/现浇搭建/楼梯现浇,楼板搭建报价口碑推荐 - 品牌推荐师

随着城市化进程加速,楼板搭建作为建筑结构改造的核心环节,需求量持续攀升。然而,行业准入门槛低、施工标准参差不齐等问题,导致市场鱼龙混杂。业主在选择服务商时,往往面临“低价陷阱”“工期拖延”“质量隐患”等…

小程序 智能ai技术的基于Spring Boot的宠物(狗)健康管理的设计与实现

目录摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 随着宠物经济的快速发展&#xff0c;宠物健康管理需求日益增长。基于Spring Boot框架和智能AI技术&#xff0c;设计并实现了一…

全网最全自考必看!10款AI论文工具测评TOP10

全网最全自考必看&#xff01;10款AI论文工具测评TOP10 2026年自考论文写作工具测评&#xff1a;为何需要这份榜单&#xff1f; 随着人工智能技术的不断进步&#xff0c;AI论文工具在学术写作中的应用越来越广泛。对于自考学生而言&#xff0c;撰写高质量论文不仅是学业要求&am…

【开题答辩全过程】以 基于微信小程序健康跑平台的设计与实现为例,包含答辩的问题和答案

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

python网络招聘信息分析系统的设计与实现 boss直聘 爬虫 技术的猎聘数据可视化分析

目录摘要开发技术路线相关技术介绍核心代码参考示例结论源码lw获取/同行可拿货,招校园代理 &#xff1a;文章底部获取博主联系方式&#xff01;摘要 随着互联网招聘平台的普及&#xff0c;网络招聘信息分析系统成为企业招聘和求职者决策的重要工具。基于Python的网络招聘信息分…

【开题答辩全过程】以 基于Android的高校员工考勤系统的设计与实现为例,包含答辩的问题和答案

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

SKF轴承动力学仿真信号分析代码功能说明

ANSYS WORKBENCH轴承动力学仿真&#xff0c;ANSYS做内圈、外圈和滚子故障的模拟图片为凯斯西储大学SKF轴承内外圈故障的结果&#xff0c;振动加速度包络后故障特征频率可以与实验相差仅为5%。一、代码整体概述 本次分析的代码集源自SKF轴承动力学仿真模型&#xff0c;包含3个核…

URL地址末尾加不加”/“有什么区别

URL 结尾是否带 / 主要影响的是 服务器如何解析请求 以及 相对路径的解析方式&#xff0c;具体区别如下&#xff1a;1. 基础概念URL&#xff08;统一资源定位符&#xff09; &#xff1a;用于唯一标识互联网资源&#xff0c;如网页、图片、API等。目录 vs. 资源&#xff1a;以 …

珲春好吃的烤肉哪家好吃

珲春好吃的烤肉&#xff0c;延炭乳酸菌烤肉不容错过在珲春&#xff0c;烤肉是当地美食文化的重要组成部分&#xff0c;众多烤肉店各有特色。而延炭乳酸菌烤肉凭借其独特的健康理念和美味菜品脱颖而出&#xff0c;成为食客们的心头好。主打健康&#xff0c;腌制独特延炭乳酸菌烤…

AI数据报告产品在文旅景区运营中的实践与技术搭建

AI数据报告产品在文旅景区运营中的实践与技术搭建pre { white-space: pre !important; word-wrap: normal !important; overflow-x: auto !important; display: block !important; font-family: "Consolas",…

【小程序毕设源码分享】基于springboot+微信小程序的面向小学生的阅读交流系统的设计与实现(程序+文档+代码讲解+一条龙定制)

博主介绍&#xff1a;✌️码农一枚 &#xff0c;专注于大学生项目实战开发、讲解和毕业&#x1f6a2;文撰写修改等。全栈领域优质创作者&#xff0c;博客之星、掘金/华为云/阿里云/InfoQ等平台优质作者、专注于Java、小程序技术领域和毕业项目实战 ✌️技术范围&#xff1a;&am…