快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
is the method    // ===================================    heavilyInstrumentedMethod(factor);    // ===================================    tracer.traceIncident("Source Instrumentation",      "heavilyInstrumentedMethod", "Responses");   } catch (Exception e) {    tracer.traceIncident("Source Instrumentation",      "heavilyInstrumentedMethod", "Exceptions");   } finally {    tracer.endThreadInfoCapture("Source Instrumentation",      "heavilyInstrumentedMethod");    c = concurrency.decrementAndGet();    tracer.trace(c, "Source Instrumentation",      "heavilyInstrumentedMethod", "Concurrent Invocations");    tracer.traceIncident("Source Instrumentation",      "heavilyInstrumentedMethod", "Invocations");   }   try { Thread.sleep(200); } catch (InterruptedException e) { } }

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

时间:2011-02-13 IBM Nicholas Whitehead

清单 1 引入了两个新的构造:

ThreadInfoCapture 方法:ThreadInfoCapture 方法对于获取运行时间和目标调用前后的 ThreadMXBean 指标增量都很有帮助。startThreadInfoCapture 为当前线程捕获基准,而 endThreadInfoCapture 计算出增量和趋势。由于这些指标永远都是递增的,所以必须事先确定一个基准,再根据它计算出之后的差量。但这个场景不适用于跟踪程序的增量功能,这是因为每一个线程的绝对值都是不同的,而且运行中的 JVM 中的线程也不是保持不变的。另外还要注意跟踪程序使用了一个栈来保存基准,所以您可以(小心地)嵌套调用。要收集这个数据可是要费一番力气。图 2 展示了收集各种 ThreadMXBean 指标所需要的相对运行时间:

图 2. 收集 ThreadMXBean 指标所需的相对成本

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

虽然如果小心使用调用的话,收集这些指标的总开销不会很大,但是仍然需要遵循在记录日志时需要考虑的一些事项,例如不要在紧凑循环(tight loop)内进行。

并发性:要跟踪在特定时间内通过这个代码的线程数,需要创建一个计数器,该计数器既要是线程安全的又要对目标类的所有实例可用 — 在本例为 AtomicInteger 类。此种情况比较麻烦,因为有时可能多个类加载器都载入了该类,致使计数器无法精确计数,从而导致度量错误。解决这个问题的办法为:将并发计数器保存在 JVM 的一个特定的受保护位置中,诸如平台代理中的 MBean。

并发性只有在插装目标是多线程的或者共用的情况下可用,但是它是非常重要的指标,这一点我将在稍后介绍 Enterprise JavaBean(EJB)截取程序时进一步阐述。EJB 截取程序是我接下来要论述的几个基于截取的插装示例的第一个,借鉴了 清单 1 中查看的跟踪方法。

EJB 3 截取程序

发布了 EJB 3 后,截取程序就成了 Java EE 架构中的标准功能(有些 Java 应用服务器支持了 EJB 截取程序一段时间)。大多数 Java EE 应用服务器的确提供了性能指标,报告有关诸如 EJB 这样的主要组件,但是仍然需要实现自己的性能指标,因为:

您需要基于上下文的或者基于范围/阈值的跟踪。

应用服务器指标固然不错,但是您希望指标位于 APM 系统中,而不是应用服务器中。

应用服务器指标无法满足您的要求。

虽然如此,根据您的 APM 系统和应用服务器实现的不同,有些工作可能不用您再亲历亲为了。例如,WebSphere® PMI 通过 Java 管理扩展(Java Management Extensions,JMX)公开了

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站: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号