- 适用于 JDK 23 的 GraalVM(最新)
- 适用于 JDK 24 的 GraalVM(早期访问)
- 适用于 JDK 21 的 GraalVM
- 适用于 JDK 17 的 GraalVM
- 存档
- 开发版本
VisualVM
GraalVM 为 VisualVM 提供支持,这是一个一体化的 Java(和多语言)监控和故障排除工具。VisualVM 使得功能强大且易于使用的 Java 工具成为可能,其中包括对支持的客座语言的堆分析。目前提供以下语言和功能
- Java:堆摘要、对象视图、线程视图、OQL 控制台
- JavaScript:堆摘要、对象视图、线程视图
- Python:堆摘要、对象视图
- Ruby:堆摘要、对象视图、线程视图
- R:堆摘要、对象视图
启动 VisualVM #
-
从 visualvm.github.io 下载最新版 VisualVM,解压缩,然后将其移动到应用程序目录。
-
双击应用程序图标以启动。
启动后,该工具会在“应用程序”区域显示所有本地运行的 Java 进程,包括 VisualVM 本身。
捕获堆转储 #
要捕获例如 Ruby 应用程序的堆转储以供以后分析,请启动应用程序并让它运行几秒钟以预热。然后在 VisualVM 中右键单击其进程,并调用“堆转储”操作。将打开 Ruby 进程的新堆查看器。
注意:使用 原生镜像 时,必须明确启用堆转储支持。在调用 native-image
工具时添加 --enable-monitoring=heapdump,jvmstat
选项以启用堆转储功能并允许 VisualVM 通过 jvmstat
检测原生可执行文件。这样,您的应用程序将处理信号并在收到 SIGUSR1
信号时捕获堆转储。有关从原生镜像进程捕获堆转储的详细信息,请参见 生成原生堆转储 页面。
分析对象 #
最初将显示 Java 堆的摘要视图。要分析 Ruby 堆,请单击堆查看器工具栏中最左边的(摘要)下拉菜单,选择 Ruby 堆范围,然后选择“对象”视图。现在,堆查看器将显示所有 Ruby 堆对象,按其类型聚合。
在“结果”视图中展开“Proc”节点以查看此类型对象的列表。每个对象都显示其由底层实现提供的逻辑值。展开对象以访问其变量和引用(如果可用)。
现在,通过单击工具栏中的按钮启用“预览”、“变量”和“引用”详细信息,然后选择各个 ProcType 对象。如果可用,“预览”视图将显示相应的源代码片段,“变量”视图将显示对象的变量,“引用”视图将显示引用所选对象的那些对象。
最后,使用堆查看器工具栏中的“预设”下拉列表,将视图从“所有对象”切换到“支配者”或“GC 根”。要显示堆支配者,必须首先计算保留大小,这对于 server.rb 示例可能需要几分钟。选择工具栏中的“对象”聚合以查看各个支配者或 GC 根。
分析线程 #
单击堆查看器工具栏中最左边的下拉列表,然后选择 Ruby 堆的“线程”视图。堆查看器现在将显示 Ruby 线程堆栈跟踪,包括本地对象。堆栈跟踪也可以通过单击 HTML 工具栏按钮以文本形式显示。
读取 JFR 快照 #
与 GraalVM 19.2.x 及更高版本捆绑在一起的 VisualVM 工具能够读取 JFR 快照,这些快照是由 JDK Flight Recorder(以前称为 Java Flight Recorder)拍摄的。JFR 是一种用于收集有关正在运行的 Java 应用程序的诊断和性能分析数据的工具。它集成到 Java 虚拟机 (JVM) 中,并且几乎不会造成性能开销,因此它甚至可以在负载很重的生产环境中使用。
要安装作为插件发布的 JFR 支持
- 运行
$JAVA_HOME/bin/jvisualvm
以启动 VisualVM; - 导航到“工具”>“插件”>“可用插件”以列出所有可用插件,然后安装 VisualVM-JFR 和 VisualVM-JFR-Generic 模块。
可以使用“文件”>“加载”操作打开 JFR 快照,或者通过双击“JFR 快照”节点并将快照永久添加到 JFR 存储库中来打开。请遵循您 Java 版本的文档以创建 JFR 快照。
JFR 查看器读取从 Java 7 开始创建的所有 JFR 快照,并将数据以工具用户熟悉的典型 VisualVM 视图呈现。
目前提供以下视图和功能选项卡
- “概述”选项卡 - 显示有关录制进程的基本信息,例如其主类、参数、JVM 版本和配置以及系统属性。此选项卡还提供对已录制线程转储的访问。
- “监控”选项卡 - 显示进程运行时间和基本遥测数据:CPU 使用率、堆和元空间使用率、已加载类的数量以及活动线程和已启动线程的数量。
- “线程”选项卡 - 基于快照中记录的所有事件,尽可能精确地重建线程时间线,具体取决于录制配置。
- “锁”选项卡 - 允许用户分析线程同步。
- “文件 I/O”选项卡 - 显示对文件系统的读写事件信息。
- “套接字 I/O”选项卡 - 显示对网络的读写事件信息。
- “采样器”选项卡 - 显示每个线程的 CPU 使用率和内存分配,以及堆直方图。还有一个实验性功能“CPU 采样器”,用于从记录的事件中构建 CPU 快照。它没有提供精确的性能分析,但仍然有助于了解已记录应用程序中的情况以及 CPU 瓶颈可能在哪里。
- “浏览器”选项卡 - 提供对快照中记录的所有事件的通用浏览器。
- “环境”选项卡 - 概述录制机器的设置和条件,例如 CPU 型号、内存大小、操作系统版本、CPU 使用率、内存使用率等。
- “录制”选项卡 - 列出录制设置和基本快照遥测数据,例如事件数量、总录制时间等。
注意:JDK Flight Recorder 的支持目前处于实验阶段。一些高级功能(例如分析 JVM 内部、显示事件堆栈跟踪或支持从实时进程创建 JFR 快照)在此预览版中不可用,将在后续版本中逐步解决。