Welcome 微信登录

首页 / 软件开发 / JAVA / Java运行时监控,第2部分: 编译后插装和性能监控

Java运行时监控,第2部分: 编译后插装和性能监控2011-02-13 IBM Nicholas Whitehead简介

正如您在本系列(共三篇文章)的 第 1 部分 中所了解到的,监控 Java 应用程序的可用性和性能及其生产中的依赖性,这对于确保问题检测和加速问题诊断和修复至关重要。需要进行监视的类的源代码级插装具有 第 1 部分 所论述过的那些优势,但是这种方法通常都不可取或者不切实际。例如,很多您所感兴趣的监控点可能位于第三方组件中,而第三方组件的源代码您是不得而知的。在第 2 部分中,我着重介绍了无需修改原始源代码而插装 Java 类和资源的方法。

可选择的在源代码外编排插装的方法有:

截取

类包装

字节码插装

本文使用了 第 1 部分 中呈现的 ITracer 接口来实现性能数据跟踪,依次举例阐明了这些技巧。

通过截取进行 Java 插装

截取 的基本前提是通过一个截取构造和收集传入的入站与出站调用信息,对特定的调用模式进行转换。一个基本的截取程序的实现会:

获取对入站调用请求的当前时间。

取回出站响应的当前时间。

将运行时间作为两次度量的增量计算出来。

将调用的运行时间提交给应用程序性能管理(APM)系统。

图 1 展示了该流程:

图 1. 性能数据收集截取程序的基本流程

很多诸如 Java Platform 和 Enterprise Edition(Java EE)这样的 Java 框架都包括对截取栈的核心支持,服务的调用可以在截取栈中通过一系列预处理和后处理组件来进行传递。有了这些栈就可以很好地将插装注入到执行路径中,这样做的好处有二:第一,无需修改目标类的源代码;第二,只要将截取程序类插入到 JVM 的类路径中并修改组件的部署描述符,这样就把插装截取程序插入到了执行流程中。