诊断工具和数据
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 组件相关的诊断信息:
- JIT (请参阅 诊断 JIT 或 AOT 问题)
- 类装入 (请参阅 诊断类装入问题)
- 共享类 (请参阅 OpenJ9 用户文档中的 诊断类数据共享问题 )
跨平台工具摘要
以下跨平台工具可用于帮助诊断问题:
- 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 的跟踪点和异常跟踪点,缺省情况下会启用最大跟踪。 命令行选项允许您精确设置要跟踪的内容,并指定跟踪输出的位置。 跟踪输出通常采用编码格式,并且需要跟踪格式化程序才能成功查看。