Welcome 微信登录

首页 / 软件开发 / JAVA / IBM的Java诊断,第4部分

IBM的Java诊断,第4部分2011-11-02 IBM Helen Beeken使用分析模块扩展 IBM Dump Analyzer for 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)指代任意类型的分析 模块。

通常,第一种分析模块得出的结论将由另一种分析模块进一步进行检查,尝试诊断特定故障或提供推 荐操作。最后,您应该能够生成类似如下内容的推荐操作:

如果转储是由保护故障引起……

……当前线程处于本地代码中……

……当前的本地代码位于包 com.acme 中……

……建议您联系 ACME Industries 以做进一步分析。

这些类型的规则可以使用 Dump Analyzer 中附带的脚本语言编写。这种脚本代表了第三种类型的分析 模块。Dump Analyzer 在设计时就考虑了简单性并且没有使用循环结构。在脚本内部,可以请求特定的分 析操作并输出一些结论。这些脚本本身并没有实际执行分析,而是将其他分析模块在逻辑上链接起来。