随着时间的推移,IBM 为它的 Java 运行时实现开发了许多监视和问题诊断设施。利用这些工具,IBM 支持团队、Java 应用程序开发人员和生产操作人员可以诊断和解决在 Java 开发中遇到的问题。
本文讨论三种主要的设施,因为它们是在 Java 技术的 IBM 实现的最新版本中实现的:跟踪引擎、转储引擎和 DTFJ 工具 API。它们都有助于 Java 开发人员判断问题的根源。
跟踪引擎
在判断软件的问题时,跟踪信息是一种强大的工具:可以使用它有效地研究问题场景(比如功能性错误、竞争状态和性能问题),而且它非常有助于了解程序的流程。
IBM 在 SDK 1.2.2 中首次在它的 Java 运行时实现中引入了跟踪引擎,帮助 IBM 开发团队诊断 Java 虚拟机(JVM)的缺陷。这种跟踪设施的目的是为虚拟机本身提供一个低开销、高性能、可配置的跟踪机制。在后续的版本中,进行了显著的调整和改进;IBM SDK 的当前版本提供一个高性能的引擎,它能够捕捉 JVM、Java Class Libraries(JCL)和部署到运行时中的任何 Java 应用程序代码的跟踪数据,而不需要任何其他设施。
激活和控制跟踪
可以通过多种机制激活和控制跟踪引擎:
通过命令行选项 -Xtrace
使用跟踪属性文件
通过 com.ibm.jvm.Trace API,使用 Java 代码进行动态控制
使用跟踪触发器事件
从外部代理使用基于 C 的 JVM RAS Interface(JVMRI)
控制跟踪的主要方法是使用命令行选项 -Xtrace,或者在选项集比较长或复杂的情况下,使用可选的跟踪属性文件。
-Xtrace 选项由一系列标志或标志-值对组成,这些设置用来决定跟踪应该写到 stderr、内部缓冲区还是二进制文件;是启用方法跟踪、JVM 跟踪,还是两者都启用;应该跟踪哪些跟踪点;是跟踪对跟踪点的任何修改,还是在发生事件时触发转储。
激活跟踪的基本知识
在使用 IBM 的跟踪设施时,需要决定的第一件事是应该将跟踪输出定向到哪个目的地。表 1 简要描述这些目的地以及将多少跟踪点数据发送给它。例如,print 将所有跟踪数据定向到 stderr,minimal 将每个跟踪点的数据子集定向到内存缓冲区,然后又可以使用 output 选项将这些缓冲区中的数据捕捉到文件中。
表 1. 跟踪目的地
关键字 | 功能 |
minimal | 将选择的跟踪点(只有标识符和时间戳)定向到核心缓冲区。不记录相关联的跟踪数据。 |
maximal | 将选择的跟踪点(标识符和时间戳以及相关联的数据)定向到核心缓冲区。 |
count | 统计在 JVM 的生命期内调用选择的跟踪点的次数。 |
将选择的跟踪点定向到 stderr,不进行缩进。 | |
iprint | 将选择的跟踪点定向到 stderr,进行缩进。 |
external | 将选择的跟踪点定向到 JVMRI 监听器。 |
exception | 将选择的跟踪点定向到为异常保留的核心缓冲区。 |