在本系列的第一篇文章中,您了解到 IBM® Dump Analyzer for Java™ 工具可以针对格式化的系统转储执行分析并提供问题诊断建议。该工具的一个优点就是可以通过编写自己的分析模块对它进行功能扩展。本文将是介绍以 Java 为平台的 IBM 诊断工具系列文章的最后一篇,将向您展示如何构建分析程序以帮助您深入研究系统转储,并对 Java 代码进行调优。
本系列的第一篇文章 介绍了 IBM Dump Analyzer for Java(或者Dump Analyzer)。您已经了解了它的功能、如何获取以及运行方式。在开始这篇文章之前,您应该温习一下上一期的文章,确保您已经完全理解了 Dump Analyzer 的工作原理。
Dump Analyzer 工具的一个关键方面是它具有可扩展性。它是由一组分析模块 组成,每个模块负责对转储的一个特定方面进行分析,并帮助诊断特定类型的问题。本文将逐步说明如何编写新的分析模块以及如何在 Dump Analyzer 内部运行它。
概述
Dump Analyzer 的构建基础是 Diagnostic Tooling Framework for Java(DTFJ),后者是 IBM 的 Java 平台实现的一部分。如果您想要编写一个 Dump Analyzer 分析模块,您应当熟悉 DTFJ(有关更多信息,请参阅 参考资料)。
Dump Analyzer 工具的目标就是提供一种已经基本构建完成的环境,供特定的分析模块在其中运行。首先,JVM 必须已经生成了系统转储并且使用 jextract 工具进行了格式化。Dump Analyzer 首先选择一个合适的映像工厂(将读取格式化后的转储),然后再读取文件来创建描述内存内容的 DTFJ Image
对象。随后为转储中的每个 Java 运行时构建独立的分析上下文。最后,选择一个特定分析模块在这些上下文中运行。
分析模块在运行时会访问全部的 Image
,但它主要针对它所分析的特定 Java 运行时进行访问。此外,它将利用各种不同的工具来生成报告、报告进程和错误。也可以使用很多实用类来简化分析程序的编写。随着时间的推移,我们的团队期望在编写分析程序和分离有用基础架构时能够提供更多的实用类。
您可能需要构建三种类型的分析模块。第一种模块将运行并得出关于所分析的运行时内容的结论。结论类似于 “the JIT is active”、“there are deadlocks”、“this dump was caused by an application error” 或 “this dump contains WebSphere® classes”。第二种类型生成一个报告描述有关 Image
内容的详细信息。在尝试诊断应用程序故障时可以使用这些报告。当然,这些报告会包含有关潜在错误的警告消息并列出转储内容。这两种类型的模块都应使用 Java 语言编写,本文将使用术语分析程序(analyzer)指代任意类型的分析模块。
通常,第一种分析模块得出的结论将由另一种分析模块进一步进行检查,尝试诊断特定故障或提供推荐操作。最后,您应该能够生成类似如下内容的推荐操作: