互联网大厂Java面试实录:严肃面试官与搞笑谢飞机的技术探讨
2026/7/23 4:54:04
参考项目: https://github.com/brendangregg/FlameGraph
适用场景:Linux 服务器 CPU 性能分析、热点函数定位、性能瓶颈排查
火焰图是一种CPU 采样分析可视化图表,用于直观展示:
🔥 顶部最宽的“平顶”函数,往往就是性能瓶颈
生成火焰图通常分为5 个步骤:
perf record采集 CPU 采样数据perf script)流程示意:
perf record ↓ perf.data ↓ perf script ↓ perf.unfold ↓ stackcollapse-perf.pl ↓ perf.folded ↓ flamegraph.pl ↓ xxx.svgperf是 Linux 内核自带工具(kernel tools),执行perf --version查看版本,若不存在perf命令,则执行如下命令进行安装:
yuminstall-y perf# 或dnfinstall-y perf确认版本:
perf --versiongitclone https://github.com/brendangregg/FlameGraph.gitcdFlameGraph主要会用到两个脚本:
stackcollapse-perf.plflamegraph.plperf是Linux 原生性能分析工具(performance 的缩写),可以:
默认情况下:
perf record -e cpu-clock -g -p28591--sleep60参数解释:
| 参数 | 含义 |
|---|---|
-e cpu-clock | 以 CPU 时钟作为采样事件(通用、稳定) |
-g | 记录调用栈(非常关键) |
-p 28591 | 指定进程 PID(主 DN 进程号) |
sleep 60 | 持续采样 60 秒 |
⏱ 一般30~60 秒就足够定位 CPU 热点
perf.data使用perf script将二进制采样数据转换为文本调用栈:
perf script -i perf.data&>perf.unfoldperf.unfold中包含:
示例(简化):
java Interpreter JVM_Invoke syscall火焰图要求将相同调用路径进行合并统计。
./stackcollapse-perf.pl perf.unfold&>perf.foldedmain;foo;bar 120 main;foo;baz 30含义:
main → foo → bar这条调用路径./flamegraph.pl perf.folded>cn.svg生成结果:
cn.svg:标准火焰图文件cn.svg-g?-g→ 只能看到函数耗时-g→ 才能看到调用链(根因分析)| 事件 | 说明 |
|---|---|
| cpu-clock | 与 CPU 频率无关,推荐 |
| cycles | 与硬件相关,受频率影响 |
👉通用分析优先用cpu-clock
一句话总结:
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