Java运行时监控,第2部分: 编译后插装和性能监控 - 编程入门网
(WAIT+BLOCK) 跟踪。依照 APM 系统,这显示为一个平均为 103 ms 的线程等待。所以把一个线程置于等待某事发生的等待状态时,它会导致一段等待时间。相反,当线程试图从 DataSource 获取连接时,它在访问一个紧密同步的资源,而随着竞争连接的线程数的增加,DAO.get 方法会明确显示出增加了的线程阻塞数。
这个测试用例显示了由于添加了插装的和非插装的数据源而导致的另外几个 DAO.get bean 实例。表 2 展示了更新了的对比场景和数值结果的列表: 表 2. 插装的 JDBC 测试运行结果
这些结果显示出了一些有趣的模式,但有一点很明了:插装的 JDBC 显然要比原始 JDBC 慢。这一点告诫我们一定要竭尽所能改进和调试插装。在这个基本的 JDBC 插装示例中,造成性能差异的原因是使用了插入式跟踪、较长的代码路径以及创建了大量额外的对象(用来执行一系列查询)。如果我想在高性能环境中使用这个方法,则需要对这个代码库执行更多的工作!使用插装的 DAO.get bean 会有另外一个明显但不是很严重的影响。这还是要归因于反射调用中的额外开销、较长的代码路径和跟踪活动。跟踪适配器看起来好像也能使用一些调优,但事实是所有的插装都会导致某种程度的开销。图 11 显示了此测试的运行时间结果: 图 11. 插装的 JDBC 结果 Java运行时监控,第2部分: 编译后插装和性能监控(16)时间:2011-02-13 IBM Nicholas Whitehead本节最后将介绍上升到数据库级的线程阻塞时间。这些数据库级的统计数字代表所有收集到的每个时间间隔内数据库调用指标的总计值。运行时间为平均值,但是计数(每个时间间隔内的响应、阻塞和等待)为每个时间间隔内的总数。在这个测试用例中,总计的每个时间间隔内的平均阻塞时间为零,但是在图 12 中,您可以观察到一些 APM 可视化工具的一个特性。虽然平均值是零,但是每一个时间间隔都有一个最大(和最小)读数。在这个图中,我的 APM 显示了一个空白的零行,它既表明了平均值也表明了最大值: 图 12. JDBC 总计阻塞时间 在本文的最后一节中,我将介绍最后一个不改变源代码插装 Java 类的技巧:字节码插装。 字节码插装 到此为止,我向您展示的不基于源代码的插装都涉及到添加对象并经常延长代码执行路径,使它比跟踪代码本身的执行还要长。在字节码插装(BCI)技巧中, |
|||||||||||||||||||||||||||||||||||||||||||||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |