分类:
2008-09-09 17:22:37
摘要:本系列包括三部分,介绍有关 ™ 应用程序的运行时监控知识,第 1 部分 重点介绍了 JVM 的健康状况和插装源代码以捕获性能指标的方法。本篇为第二部分,介绍了在无需改变原始源代码的情况下来插装 类和构造的技巧。
简介
正如您在本系列(共三篇文章)的第1部分中所了解到的,监控Java 应用程序的可用性和性能及其生产中的依赖性,这对于确保问题检测和加速问题诊断和修复至关重要。需要进行监视的类的源代码级插装具有 第 1 部分 所论述过的那些优势,但是这种方法通常都不可取或者不切实际。例如,很多您所感兴趣的监控点可能位于第三方组件中,而第三方组件的源代码您是不得而知的。在第 2 部分中,我着重介绍了无需修改原始源代码而插装 Java 类和资源的方法。
可选择的在源代码外编排插装的方法有:
本文使用了第1 部分中呈现的ITracer 接口来实现性能数据跟踪,依次举例阐明了这些技巧。
通过截取进行 Java 插装
截取 的基本前提是通过一个截取构造和收集传入的入站与出站调用信息,对特定的调用模式进行转换。一个基本的截取程序的实现会:
图 1 展示了该流程:
图 1. 性能数据收集截取程序的基本流程
|
很多诸如 Java Platform 和 Enterprise Edition(Java EE)这样的 Java 框架都包括对截取栈的核心支持,服务的调用可以在截取栈中通过一系列预处理和后处理组件来进行传递。有了这些栈就可以很好地将插装注入到执行路径中,这样做的好处有二:第一,无需修改目标类的源代码;第二,只要将截取程序类插入到 JVM 的类路径中并修改组件的部署描述符,这样就把插装截取程序插入到了执行流程中。
截取的核心指标
截取程序所收集的一个典型的指标就是运行时间。其他的指标同样适合截取模式。我将介绍支持这些指标的 ITracer
接口的两个新的方面,所以在这里我要转下话题,先简要论述一下这些指标。
使用截取程序时需要收集的典型指标有:
还有两个 ThreadMXBean
指标可以选择,但它们的作用有限,而且收集成本会高一些:
[1]