Java 线程转储文件火焰图

对于生产环境的性能问题调试与故障排除而言,线程转储文件是非常重要的工件。线程转储文件往往会有几百行代码(有时会有几千行)。由于其十分冗长,所以我们很难了解其中的所有信息。那么,如果线程转储文件中存储的信息能够以一个紧凑的火焰图来得到展示,这将使我们的分析工作更加轻松。

在本文中,我们将了解如何从 Java 应用程序中生成火焰图。使用本文中所介绍的步骤,您不仅可从 Java 应用程序中生成火焰图,还可为 Java、Scala、Jython、kotlin、jruby 等运行于 JVM 中的任何语言的程序生成此图形。

如何生成火焰图?

从应用程序生成火焰图只需 2 个简单步骤:

  1. 捕获线程转储文件
  2. 使用 fastThread 工具对其进行分析

下面我们就来详细介绍一下这些步骤。

1. 捕获线程转储文件

在应用程序中的性能问题正在酝酿时捕获线程转储文件。目前有 8 种不同的选项可用于捕获线程转储文件。您可根据环境情况选择最适合自己的选项。

我最喜欢的选项是“jstack”。“jstack”是一款高效的命令行工具,并已随附在 JDK_HOME/bin 文件夹中。如果您想对线程转储文件进行捕获,则需发出以下命令:

jstack -l <pid> > <file-path>

其中:

pid – 应用程序的进程 ID(需要捕获转储文件的)

file-path – 转储文件将被写入的路径。

示例:

jstack -l 37320 > /opt/tmp/threadDump.txt

如上所示,进程的线程转储信息将被存入 /opt/tmp/threadDump.txt 文件中。

2. 使用 fastThread 工具对其进行分析

在捕获了线程转储文件后,将生成的文件上传至 fastThread 工具中。fastThread 是一款免费的在线线程转储文件分析工具,可对您的转储文件进行分析并即时生成美观的分析报告。可以看看这一份使用 fastThread 生成的示例报告。在报告底部,您将看到一张火焰图。

注意:如果您不太想在运行于云端的 fastThread 中上传自己的线程转储文件,则可在此处注册并将工具安装至本地,然后再进行分析。

图:fastThread 生成的火焰图

如何使用火焰图?

在火焰图中,您将看到应用程序正在执行的代码行。执行代码行的线程数量。您还可看到大部分的第三方库以及框架。火焰图中还可进行缩放。您也能在其中搜索应用程序的方法、类或者包名。如需了解更多有关高效使用火焰图的信息,可观看下方的视频

结论

火焰图为您提供了有关线程转储文件的紧凑视图。在线程转储文件人工浏览数百行栈追踪信息,其体验自然是很难与采用图形化、可视化的分析方式相提并论。

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )

Connecting to %s

Blog at WordPress.com.

Up ↑

%d bloggers like this: