VisualVM

GraalVM 为 VisualVM 提供支持,这是一款一体化的 Java(和多语言)监控与故障排除工具。VisualVM 提供了强大而易用的 Java 工具,其中包括对受支持的客体语言的堆分析。以下语言和功能目前可用:

  • Java:堆摘要、对象视图、线程视图、OQL 控制台
  • JavaScript:堆摘要、对象视图、线程视图
  • Python:堆摘要、对象视图
  • Ruby:堆摘要、对象视图、线程视图
  • R:堆摘要、对象视图

启动 VisualVM #

  1. visualvm.github.io 下载最新的 VisualVM,解压并将其移动到应用程序目录。

  2. 双击应用程序图标即可启动。

启动后,工具会立即在应用程序区域显示所有本地运行的 Java 进程,包括 VisualVM 自身的进程。

将 VisualVM 与 GraalVM 本机可执行文件结合使用 #

注意:VisualVM 对 GraalVM 本机可执行文件的支持目前在 Windows 上尚不可用。

使用 GraalVM Native Image 时,VisualVM 支持默认禁用。在构建本机可执行文件时,可以通过选项 --enable-monitoring=jvmstat,heapdump 启用 VisualVM 支持。

native-image --enable-monitoring=jvmstat,heapdump JavaApplication

捕获堆转储 #

要捕获堆转储以便后续分析,请启动您的应用程序并让它运行几秒钟以进行预热。然后右键单击 VisualVM 中的进程并调用“Heap Dump”操作。

分析对象 #

最初显示的是 Java 堆的摘要视图。要分析 Ruby 堆,请单击“堆查看器”工具栏中最左侧(摘要)的下拉菜单,选择 Ruby 堆范围,然后选择“对象”视图。现在堆查看器将显示所有 Ruby 堆对象,并按其类型聚合。

展开“结果”视图中的“Proc”节点,查看此类型对象的列表。每个对象都显示其由底层实现提供的逻辑值。展开对象以访问它们的变量和引用(如果可用)。

VisualVM: Heap Viewer Objects

现在,通过单击工具栏中的按钮启用“预览”、“变量”和“引用”详细信息,并选择单个 ProcType 对象。如果可用,“预览”视图显示相应的源代码片段,“变量”视图显示对象的变量,“引用”视图显示引用选定对象的对象。

最后,使用“堆查看器”工具栏中的“预设”下拉列表将视图从“所有对象”切换到“支配者”或“GC 根”。要显示堆支配者,必须首先计算保留大小,这对于 server.rb 示例可能需要几分钟。在工具栏中选择“对象”聚合以查看单个支配者或 GC 根。

VisualVM: Heap Viewer Objects Dominators

分析线程 #

单击“堆查看器”工具栏中最左侧的下拉列表,选择 Ruby 堆的“线程”视图。堆查看器现在显示 Ruby 线程堆栈跟踪,包括局部对象。堆栈跟踪也可以通过单击 HTML 工具栏按钮以文本形式显示。

VisualVM: Heap Viewer Thread

读取 JFR 快照 #

GraalVM 19.2.x 及更高版本中捆绑的 VisualVM 工具具有读取 JFR 快照的能力——这些快照是使用 JDK Flight Recorder(以前称为 Java Flight Recorder)捕获的。JFR 是一种用于收集正在运行的 Java 应用程序的诊断和分析数据的工具。它集成到 Java 虚拟机 (JVM) 中,几乎不产生性能开销,因此即使在负载很高的生产环境中也可以使用。

要安装作为插件发布的 JFR 支持,请执行以下操作:

  1. 运行 $JAVA_HOME/bin/jvisualvm 启动 VisualVM;
  2. 导航到“工具”>“插件”>“可用插件”以列出所有可用插件,然后安装 VisualVM-JFRVisualVM-JFR-Generic 模块。

JFR 快照可以通过“文件”>“加载”操作打开,或者通过双击“JFR 快照”节点并将快照永久添加到 JFR 存储库中。请遵循您的 Java 版本的文档来创建 JFR 快照。

JFR 查看器读取从 Java 7 及更高版本创建的所有 JFR 快照,并以工具用户熟悉的典型 VisualVM 视图呈现数据。

VisualVM: Viewing JFR via VisualVM

目前这些视图和功能选项卡可用:

  • “概览”选项卡 - 显示有关记录进程的基本信息,例如其主类、参数、JVM 版本和配置以及系统属性。此选项卡还提供对记录的线程转储的访问。
  • “监控”选项卡 - 显示进程正常运行时间以及基本遥测数据:CPU 使用率、堆和元空间利用率、加载类的数量以及活动和已启动线程的数量。
  • “线程”选项卡 - 根据记录配置,尽可能精确地根据快照中记录的所有事件重构线程时间线。
  • “锁”选项卡 - 允许用户分析线程同步。
  • “文件 IO”选项卡 - 显示文件系统的读写事件信息。
  • “套接字 IO”选项卡 - 显示网络的读写事件信息。
  • “采样器”选项卡 - 显示每个线程的 CPU 利用率和内存分配,以及堆直方图。还有一个实验性功能“CPU 采样器”,用于从记录的事件构建 CPU 快照。它不提供精确的性能分析,但仍然有助于理解记录的应用程序中发生了什么,以及 CPU 瓶颈可能在哪里。
  • “浏览器”选项卡 - 提供快照中记录的所有事件的通用浏览器。
  • “环境”选项卡 - 概述记录机器的设置和条件,例如 CPU 型号、内存大小、操作系统版本、CPU 利用率、内存使用情况等。
  • “记录”选项卡 - 列出记录设置和基本快照遥测数据,例如事件数量、总记录时间等。

注意:目前对 JDK Flight Recorder 的支持仍处于实验阶段。一些高级功能,例如分析 JVM 内部结构、显示事件堆栈跟踪或支持从实时进程创建 JFR 快照,在此预览版本中尚不可用,将在后续版本中逐步解决。

联系我们