火焰图(Flame Graph)使用指南
火焰图(Flame Graph) 是一种可视化性能分析工具,可以帮助你快速定位 CPU、内存或 I/O 瓶颈。它看起来像火焰,因此得名。
- 火焰图能解决什么问题?
- CPU 占用高:找出哪些函数消耗了最多的 CPU 时间。
- 程序卡顿:分析代码执行路径,找到慢速操作。
- 线程阻塞:查看哪些线程在等待锁或 I/O。
- 内存泄漏(需配合内存分析工具)。
- 准备工作
Linux / macOS
安装 perf(Linux 性能分析工具)
sudo apt install linux-tools-common linux-tools-generic # Ubuntu/Debian
sudo yum install perf # CentOS/RHEL
安装 FlameGraph 脚本
git clone https://github.com/brendangregg/FlameGraph.git
cd FlameGraph
export PATH=$PATH:$(pwd) # 临时添加到 PATH
3. 生成 CPU 火焰图(以 Java 为例)
(1)采集数据
方法 1:使用 perf(推荐,适用于 Linux)
1. 找到 Java 进程 ID
jps # 或 ps -ef | grep java
2. 采集 CPU 调用栈(采样 30 秒)
sudo perf record -F 99 -p -g -- sleep 30
3. 生成火焰图
perf script | stackcollapse-perf.pl | flamegraph.pl > flamegraph.svg
方法 2:使用 async-profiler(更简单,支持 Java)
下载 async-profiler
wget https://github.com/jvm-profiling-tools/async-profiler/releases/download/v2.9/async-profiler-2.9-linux-x64.tar.gz
tar -xzf async-profiler-.tar.gz
cd async-profiler-
采集 CPU 数据(采样 30 秒)
./profiler.sh -d 30 -f flamegraph.svg
(2)查看火焰图
生成的 flamegraph.svg 可以用浏览器打开:
firefox flamegraph.svg # 或 chrome, edge
4. 如何读懂火焰图?
火焰图结构
- Y 轴(高度):调用栈深度(越深表示调用链越长)。
- X 轴(宽度):函数执行时间占比(越宽表示占用 CPU 越多)。
- 颜色:无特殊含义,仅用于区分不同函数。
关键操作
操作
说明
鼠标悬停
显示函数名、CPU 占比
点击放大
查看某个函数的详细调用链
搜索(Ctrl+F)
查找特定函数(如 java.lang.Thread.sleep)
[图片]
- 常见问题
(1)火焰图显示 [unknown] 怎么办?
- 原因:缺少调试符号(如 JVM 未启用 -XX:+PreserveFramePointer)。
- 解决方案:
Java 运行时添加参数
java -XX:+PreserveFramePointer -jar your_app.jar
或者使用 async-profiler 的 --all-user 选项
./profiler.sh --all-user -d 30 -f flamegraph.svg
(2)如何分析内存泄漏?
改用 内存火焰图(需 async-profiler):
./profiler.sh -d 30 -e alloc -f mem_flamegraph.svg
6. 进阶用法
场景
命令
分析锁竞争
./profiler.sh -e lock -d 30 -f lock.svg
分析 I/O 等待
perf record -e 'sched:sched_stat_iowait' -p -g -- sleep 10
生成差分火焰图
diff two_flamegraphs.svg
7. 总结
- 安装工具:perf + FlameGraph 或 async-profiler。
- 采集数据:perf record 或 ./profiler.sh -d 30。
- 生成 SVG:flamegraph.pl 转换数据。
火焰图(Flame Graph)使用指南的更多相关文章
- perf + 火焰图用法 小结
要对新服务做性能测试,分析代码热点,初识perf,做下总结 perf + 火焰图用法 perf简介 Perf (Performance Event), Linux 系统原生提供的性能分析工具, 会返回 ...
- Linux下用火焰图进行性能分析【转】
转自:https://blog.csdn.net/gatieme/article/details/78885908 版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原 ...
- 火焰图工具 SystemTap
1. 安装 SystemTap 1. 首先安装内核开发包和调试包: # rpm -ivh kernel-debuginfo-common-($version).rpm # rpm -ivh kerne ...
- 使用perf生成Flame Graph(火焰图)
具体的步骤参见这里: <flame graph:图形化perf call stack数据的小工具> 使用SystemTap脚本制作火焰图,内存较少时,分配存储采样的数组可能失败,需 ...
- perf + Flame Graph火焰图分析程序性能
1.perf命令简要介绍 性能调优时,我们通常需要分析查找到程序百分比高的热点代码片段,这便需要使用 perf record 记录单个函数级别的统计信息,并使用 perf report 来显示统计结果 ...
- linux系统分析工具续-SystemTap和火焰图(Flame Graph)
本文为网上各位大神文章的综合简单实践篇,参考文章较多,有些总结性东西,自认暂无法详细写出,建议读文中列出的参考文档,相信会受益颇多.下面开始吧(本文出自 “cclo的博客” 博客,请务必保留此出处ht ...
- [失败]SystemTap和火焰图(Flame Graph)
本文参考http://blog.51cto.com/xuclv/1184517 SystemTap简介: SystemTap provides free software (GPL) infrastr ...
- 火焰图(Flame Graphs)的安装和基本用法
火焰图(Flame Graphs) 一.概述: 火焰图(flame graph)是性能分析的利器,通过它可以快速定位性能瓶颈点. perf 命令(performance 的缩写)是 Linux 系统原 ...
- 动态追踪技术(中) - Dtrace、SystemTap、火焰图
http://openresty.org/cn/presentations.html http://weibo.com/agentzh?is_all=1 http://openresty.org/po ...
- 使用Flame Graph进行系统性能分析
关键词:Flame Graph.perf.perl. FlameGraph是由BrendanGregg开发的一款开源可视化性能分析工具,形象的成为火焰图. 从底向上像火苗一样逐渐变小,也反映了相互之间 ...
随机推荐
- Mina源码-整体解读
阅读笔记(一)-整体解读 Apache MINA is a network application framework which helps users develop high performan ...
- ffmpeg简易播放器(4)--使用SDL播放音频
SDL(英语:Simple DirectMedia Layer)是一套开放源代码的跨平台多媒体开发函数库,使用C语言写成.SDL提供了数种控制图像.声音.输出入的函数,让开发者只要用相同或是相似的代码 ...
- 0425-字节输入流FileInputStream
package A10_IOStream; import java.io.FileInputStream; import java.io.IOException; /* java.io.InputSt ...
- 使用Chainlit快速构建一个对话式人工智能应用体验DeepSeek-R1
Chainlit是一个开源的 Python 包,用于构建可用于生产的对话式人工智能. DeepSeek-R1 是一款强化学习(RL)驱动的推理模型,解决了模型中的重复性和可读性问题.在 RL 之前,D ...
- DeepSeek本地安装部署(指南)
前言 这两天deepseek出圈了. 今天分享一下,如果在本地电脑部署和运行deepseek,实现AI对话的功能. 访问ollama官网: https://ollama.com/ 下载一个合适自己操作 ...
- 深入剖析实体-关系模型(ER 图):理论与实践全解析
title: 深入剖析实体-关系模型(ER 图):理论与实践全解析 date: 2025/2/8 updated: 2025/2/8 author: cmdragon excerpt: 实体-关系模型 ...
- linux安装Phoenix
1.下载对应hbase的版本 http://www.apache.org/dyn/closer.lua/phoenix/ 解压后找到phoenix-4.14.2-HBase-1.4-server.ja ...
- ssh免密登录和代理连接线上服务器
一.本地ssh配置 1.本地没有.ssh目录,第一次初始化ssh,一直回车键默认值 ssh-keygen -t rsa -P '' 2.设置目录权限 chmod 700 -R .ssh 设置目录权限 ...
- SQLServer日期格式转换
原文链接:https://blog.csdn.net/Diliges/article/details/84836884 常用: Select CONVERT(varchar(100), GETDATE ...
- nginx失效 nginx不起作用
nginx失效的原因 今天大晚上的,服务器更新了,重启了,然后我重新开一下后端,nginx. 奇了个怪,一直给我报404,而且不是nginx给我报的啊,就是普通的404,完全404了. 我看nginx ...