Java运行时监控,第2部分: 编译后插装和性能监控 - 编程入门网
ublic static void premain(String args, Instrumentation inst) 方法。正如名称 premain 所暗示的,这个方法是在主 Java 应用程序入口点前被调用的,该入口点允许调用的类优先访问它,从而开始修改载入的类。关于这点它是通过注册 ClassTransformer(第二个结构)实例来实现的。ClassTransformer 接口负责从类加载程序有效截取调用并动态重写载入类的字节码。ClassTransformer 的单个方法 — transform — 被传入要重定义的类和包含类的字节码的字节数组。然后 transform 方法实现各种修改,并返回一个包含修改的(或插装的)类的字节码的新字节数组。这种模型允许快速有效地传输类,并且与前面的一些方法不同,它不需要本地组件参与工作。
实现 SpringRunner 测试用例中的动态 BCI 有两步:首先,必须重新编译 org.runtimemonitoring.spring.EmpDAOImpl 类,将上面的测试用例中的静态 BCI 移除。其次,JVM 启动选项需要保留 -Djboss.aop.path=[directory]/jboss-aop.xml 选项,并且要按如下的方式添加 javaagent 选项:
清单 18 展示了一个稍微修改过的 jboss-aop.xml 文件,它说明了动态 BCI 的优势: 清单 18. 缩减的动态 BCI jboss-aop.xml 文件
Java运行时监控,第2部分: 编译后插装和性能监控(19)时间:2011-02-13 IBM Nicholas Whitehead动态 BCI 的好处之一就是可以插装任何类,包括第三方库,所以清单 18 展示了 java.sql.Connection 所有实例的插装。然而它更强大的能力是可以把任何(但可用的)截取程序应用到定义的切入点。例如,org.runtimemonitoring.aop.PreparedStatementInterceptor 是一个普通的但却与 ITracerInterceptor 有些不同的截取程序。截取程序的整个库(在 AOP 用语中常指方面(aspects))都可以被开发,并可以通过开源提供商获得。这些方面库可以提供广泛的透视图,根据您想要应用的插装类型、要插装的 API 的不同,或者两者均不同,这些透视图的用途也不一样。 图 14 展示了其他指标的指标树。注意通过使用 Spring 中的 Jakarta Commons DataSource 提供者,有几个类实现了 java.sql 接口。 图 14. 动态 BCI 指标树 对比一下 WrappingJDBC 插装技术和使用 BCI 插装的驱动程序的性能差异,BCI 方法最大的优点就很明了了。这点在清单 15 中有所展示,清单 15 展示了 PreparedStatement.executeQuery 的对比运行时间: 图 15. BCI 对比包装性能 第 2 部分结束语 在这篇文章中我介绍了很多种插装 Java 应用程序的方式,目的是为了跟踪 APM 系统的性能监控数据。我所展现的这 |
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |