诊断工具和数据

J9 虚拟机 (VM) 会生成各种类型的诊断信息以供分析。 可使用一系列工具来对该信息进行后处理,并帮助确定问题。

某些诊断信息针对 Java™ 运行时环境的特定区域。 例如,堆转储可提供有关 Java 堆中的类和对象实例的实用信息,而 J9 跟踪针对的是更普遍的 VM 问题。

确定问题期间,首要目标之一就是要确定问题根源最有可能在何处。 许多似乎是 Java 问题的问题源自其他地方。 出现问题的区域包括:
  • Java 虚拟机 (VM)
  • 本机代码
  • Java 应用程序
  • 操作系统或系统资源
  • 子系统,例如,数据库代码
  • 硬件

可能需要不同的工具和不同的诊断信息来解决每个区域出现的问题。 此处描述的工具是指构建到 J9 VM 中的工具,或者可配合 J9 VM 一起使用的工具。 其中大部分工具均为跨平台工具。 许多其他工具均由硬件或系统软件供应商提供(如系统调试器)。

诊断信息摘要

运行的 J9 VM 包括在发生不同事件时生成不同类型的诊断数据的机制。 通常,在缺省条件下生成此数据,但是可通过使用特定选项启动 VM(例如,-Xdump)来控制该数据的生成。 早期版本的 VM 使用环境变量来控制诊断信息的生成。 您仍可以使用这些环境变量,但这不是首选机制。

所生成诊断信息的格式特定于 J9 VM,在不同发行版之间可能会不同。

可生成以下类型的诊断信息:
Java 转储文件
在某些 VM 中, Java 转储文件有时称为 Javacore 或线程转储。 当 VM 由于操作系统信号、OutOfMemoryError 异常或用户输入的保留关键字组合而异常终止时,缺省情况下会生成此人类可读格式的转储文件。 例如, Windows 上的 Ctrl-Break 会生成 Java 转储文件。 您还可以通过从 Dump API 调用方法 (例如,从应用程序内部调用 com.ibm.jvm.Dump.JavaDump()) 来生成 Java 转储文件。 Java 转储文件总结了 VM 在发生信号时的状态。 Java 转储文件的大部分内容特定于 J9 虚拟机。 请参阅 Java 转储 以获取详细信息。
堆转储文件
VM 可在用户请求时通过从应用程序内部调用 com.ibm.jvm.Dump.HeapDump() 来生成堆转储文件,或者缺省情况下在 VM 因 OutOfMemoryError 异常而终止时生成堆转储文件。 您可以使用 -Xdump:heap 选项指定对堆转储文件的创建时间进行更精细的控制。 例如,在发生一定数量的完整垃圾回收后,您可以请求堆转储文件。 缺省 Heapdump 格式(phd 文件)是人类不可读的,必须使用可用工具(例如,Memory Analyzer)来处理。 请参阅 使用 Heapdump 以获取更多详细信息。
系统转储文件
系统转储文件是特定于平台的文件,其中包含有关活动进程、线程和系统内存的信息。 这些文件也称为 Linux® 平台上的核心转储。 系统转储文件通常很大。 缺省情况下,VM 仅在 VM 因 GPF(一般性保护错误)、严重的 VM 或系统错误而意外失败时才生成系统转储文件。 您还可以使用转储 API 请求系统转储文件。 例如,可以从应用程序调用 com.ibm.jvm.Dump.SystemDump() 方法。 您可以使用 -Xdump:system 选项在发生其他事件时生成系统转储文件。
JIT 转储文件
在发生一般保护错误 (GPF) 或异常中止事件时,Just-In-Time (JIT) 编译器生成诊断数据的小型二进制转储文件,可帮助诊断问题。 有关此文件的位置的更多信息,请参阅 文件位置
垃圾回收数据
使用 -verbose:gc 选项启动的 VM 会生成 XML 格式的输出,这些输出可用于分析垃圾收集器本身的问题,或者用户应用程序设计中的问题。 众多的其他选项可影响生成的“垃圾收集器”诊断信息的性质和总量。 有关更多信息,请参阅 垃圾收集器诊断数据
跟踪数据
J9 跟踪允许记录 Java 代码和内部 VM 代码中的执行点。 -Xtrace 选项允许控制跟踪点的数量和区域,以及保持跟踪缓冲区的大小和性质。 发生故障时内部跟踪缓冲区也可在系统转储文件中使用,并且可使用工具从此文件中抽取它们。 通常,跟踪数据以编码格式写入文件,然后,跟踪格式化程序将数据转换为可读格式。 然而,如果只需生成少量跟踪而且性能不是问题,那么可以将跟踪传递到 STDERR 并重新进行格式化。 有关更多信息,请参阅 跟踪 Java 应用程序
其他数据
有一些特殊选项用于生成与以下 J9 组件相关的诊断信息:

跨平台工具摘要

以下跨平台工具可用于帮助诊断问题:
IBM® Monitoring and Diagnostic Tools
IBM Monitoring and Diagnostic Tools 是一组基于 GUI 的工具,用于监视应用程序和分析诊断数据。 这些工具是为了尽量快速轻松地执行诊断任务而设计的。 有关这些工具的更多信息,请参阅 IBM Monitoring and Diagnostic tools 文档。
跨平台转储查看器
跨系统转储查看器 jdmpview 使用操作系统生成的转储文件来解析与 J9 VM 相关的数据。 转储查看器了解 VM,并可用于对其内部进行分析。 这是对 VM 意外终止进行调试的有用工具。 由于转储查看器可以跨平台,您可以在任何系统中分析转储,且无须系统调试器方面的知识。 有关更多信息,请参阅 转储查看器
JVMTI 工具
JVM 工具接口 (JVMTI) 是一个供工具使用的编程接口,用于替换 Java 虚拟机概要分析程序接口 (JVMPI) 和 Java 虚拟机调试接口 (JVMDI)。 有关 JVMTI 的信息,请参阅 Java 虚拟机工具接口
JPDA 工具
Java 平台调试体系结构 (JPDA) 是用于调试 Java VM 的通用标准。 J9 完全兼容 JPDA。 任何 JPDA 调试器都可连接到 J9 VM。 因为它们是调试器,所以 JPDA 工具最适合跟踪具有可重复情况的应用程序问题,如应用程序中的内存泄漏或挂起。 JPDA 工具的一个示例是与 Eclipse for Java 捆绑在一起的调试器。
DTFJ
Java 诊断工具框架 (DTFJ) 是一个 Java 应用程序编程接口 (API) ,用于支持 Java 诊断工具的构建。 DTFJ 可以检查系统转储文件以分析 Java 虚拟机的内部结构。 DTFJ 采用纯 Java 代码实现,使用 DTFJ 编写的工具可以跨平台。 因此,可以在其他(远程或更方便的)机器上分析从某台机器上获取的转储文件。 例如,可以在 Windows Thinkpad 上分析在 z/OS® 机器上生成的转储文件。 有关更多信息,请参阅 使用诊断工具框架 for Java
跟踪格式化
跟踪是关键的诊断工具。 J9 VM 在确定要跟踪的内容和跟踪时间方面体现出极大的灵活性。 这一灵活性使您能够定制跟踪,从而相对减少对性能的影响。 J9 VM 还包含许多嵌入式跟踪点。 在此发行版中,对于部分级别为 1 的跟踪点和异常跟踪点,缺省情况下会启用最大跟踪。 命令行选项允许您精确设置要跟踪的内容,并指定跟踪输出的位置。 跟踪输出通常采用编码格式,并且需要跟踪格式化程序才能成功查看。
除了 VM 代码中提供的嵌入式跟踪点外,您还可以在 Java 代码中放置自己的应用程序跟踪点。 您可以针对所有类中的所有方法激活入口和出口跟踪。 或者,可以为所选类中的所选方法激活跟踪。 应用程序和方法跟踪利用 VM 嵌入式跟踪点插入到跟踪缓冲区中。 跟踪允许详细地分析从代码获取的路径。 跟踪主要用于性能和泄漏问题确定。 跟踪数据还能够提供意外终止或挂起之前 VM 状态的线索。 跟踪和跟踪格式化特定于 J9 VM。 有关更多详细信息,请参阅 跟踪 Java 应用程序 。 虽然跟踪难于理解,但却是一种有效的工具。