火焰图:定位性能瓶颈的杀手锏本文是《JVM调优实战》专栏第 18 讲。引言前面三讲我们学习了多种诊断工具,它们各自擅长不同的分析维度:jstack 看线程栈,jmap 看内存快照,Arthas 看方法链路。但它们都有一个共同的盲区——无法直观回答"CPU 到底花在哪儿了"。一个典型的排障场景是:CPU 使用率 90% 以上,看线程栈好像每个方法都正常,看 GC 日志也没发现异常。"CPU 到底去哪儿了"这个问题就像账本对不上。火焰图(Flame Graph)就是为解决这个痛点而生的。它由 Netflix 的高级性能工程师 Brendan Gregg 于 2011 年发明,核心思想是将采样到的函数调用栈数据,以一种"越宽越慢、越深越细"的可视化形式呈现。一张图就能让你看出:哪个方法占的 CPU 最多、哪条调用路径导致了瓶颈、以及方法之间的调用关系。如果只让我推荐一个"性能分析的思维方式",我会说是火焰图。无论你用 Java、Go、Python 还是 Node.js,这个方法论是通用的。火焰图是什么火焰图不是一种工具,而是一种数据可视化技术。它的输入是多次采样的调用栈(stack trace),输出是一张层次分明、颜色交织的 SVG 图片。基本形态横轴(宽度):代表采样到的次数,宽度越大说明该方法执行时被采样到的频率越高纵轴(高度)