快速业务通道

Java运行时监控,第2部分: 编译后插装和性能监控 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
(WAIT+BLOCK) 跟踪。依照 APM 系统,这显示为一个平均为 103 ms 的线程等待。所以把一个线程置于等待某事发生的等待状态时,它会导致一段等待时间。相反,当线程试图从 DataSource 获取连接时,它在访问一个紧密同步的资源,而随着竞争连接的线程数的增加,DAO.get 方法会明确显示出增加了的线程阻塞数。

这个测试用例显示了由于添加了插装的和非插装的数据源而导致的另外几个 DAO.get bean 实例。表 2 展示了更新了的对比场景和数值结果的列表:

表 2. 插装的 JDBC 测试运行结果

测试用例 平均运行时间(ms) 最小运行时间(ms) 最大运行时间(ms) 计数
直接访问,原始 JDBC 5 0 78 12187
直接访问,插装的 JDBC 27 0 281 8509
无截取程序 Spring bean,原始 JDBC 15 0 125 12187
无截取程序 Spring bean,插装的 JDBC 35 0 157 8511
插装的 Spring bean,原始 JDBC 16 0 125 12189
插装的 Spring bean,插装的 JDBC 36 0 250 8511
优化的插装 Spring bean,原始 JDBC 15 0 203 12188
优化的插装 Spring bean,插装的 JDBC 35 0 187 8511

这些结果显示出了一些有趣的模式,但有一点很明了:插装的 JDBC 显然要比原始 JDBC 慢。这一点告诫我们一定要竭尽所能改进和调试插装。在这个基本的 JDBC 插装示例中,造成性能差异的原因是使用了插入式跟踪、较长的代码路径以及创建了大量额外的对象(用来执行一系列查询)。如果我想在高性能环境中使用这个方法,则需要对这个代码库执行更多的工作!使用插装的 DAO.get bean 会有另外一个明显但不是很严重的影响。这还是要归因于反射调用中的额外开销、较长的代码路径和跟踪活动。跟踪适配器看起来好像也能使用一些调优,但事实是所有的插装都会导致某种程度的开销。图 11 显示了此测试的运行时间结果:

图 11. 插装的 JDBC 结果

Java运行时监控,第2部分: 编译后插装和性能监控 - 编程入门网

Java运行时监控,第2部分: 编译后插装和性能监控(16)

时间:2011-02-13 IBM Nicholas Whitehead

本节最后将介绍上升到数据库级的线程阻塞时间。这些数据库级的统计数字代表所有收集到的每个时间间隔内数据库调用指标的总计值。运行时间为平均值,但是计数(每个时间间隔内的响应、阻塞和等待)为每个时间间隔内的总数。在这个测试用例中,总计的每个时间间隔内的平均阻塞时间为零,但是在图 12 中,您可以观察到一些 APM 可视化工具的一个特性。虽然平均值是零,但是每一个时间间隔都有一个最大(和最小)读数。在这个图中,我的 APM 显示了一个空白的零行,它既表明了平均值也表明了最大值:

图 12. JDBC 总计阻塞时间

Java运行时监控,第2部分: 编译后插装和性能监控 - 编程入门网

在本文的最后一节中,我将介绍最后一个不改变源代码插装 Java 类的技巧:字节码插装。

字节码插装

到此为止,我向您展示的不基于源代码的插装都涉及到添加对象并经常延长代码执行路径,使它比跟踪代码本身的执行还要长。在字节码插装(BCI)技巧中,

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号