快速业务通道

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

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-19
,它表示以下内容:

目标类

要调用的方法名

由作为实参传入目标方法的参数组成的负载

接着这个对象可以被继续传递,直至传递到调用方,调用方解组调用对象并针对端点目标对象实现动态执行。

客户端截取程序将当前请求时间添加到调用上下文,而服务器端截取程序则负责添加接收请求的时间戳和发送响应的时间戳。或者,服务器可以获得客户机请求,由客户机计算出请求和来回传输的总运行时间。每种情况的计算方法为:

客户端,向上传输时间等于 ServerSideReceivedTime 减去 ClientSideRequestTime

客户端,向下传输时间等于 ClientSideReceivedTime 减去 ServerSideRespondTime

服务器端,向上传输时间等于 ServerSideReceivedTime 减去 ClientSideRequestTime

清单 7 展示了客户端截取程序的 invoke 方法:

清单 7. 客户端截取程序的 invoke 方法

/** * The interception invocation point. * @param invocation The encapsulated invocation. * @return The return value of the invocation. * @throws Throwable * @see org.jboss.aop.advice.Interceptor#invoke(org.jboss.aop.joinpoint.Invocation) */ public Object invoke(Invocation invocation) throws Throwable {   if(invocation instanceof MethodInvocation) {    getInvocationContext().put(CLIENT_REQUEST_TIME, System.currentTimeMillis());    Object returnValue = clientInvoke((MethodInvocation)invocation);    long clientResponseTime = System.currentTimeMillis();    Map<String, Serializable> context = getInvocationContext();    long clientRequestTime = (Long)context.get(CLIENT_REQUEST_TIME);    long serverReceiveTime = (Long)context.get(SERVER_RECEIVED_TIME);    long serverResponseTime = (Long)context.get(SERVER_RESPOND_TIME);    long transportUp = serverReceiveTime-clientRequestTime;    long transportDown = serverResponseTime-clientResponseTime;    long totalElapsed = clientResponseTime-clientRequestTime;    String methodName = ((MethodInvocation)invocation).getActualMethod().getName();    String className = ((MethodInvocation)invocation).getActualMethod()      .getDeclaringClass().getSimpleName();    ITracer tracer = TracerFactory.getInstance();    tracer.trace(transportUp, "EJB Client", className, methodName,      "Transport Up", transportUp);    tracer.trace(transportDown, "EJB Client", className, methodName,      "Transport Down", transportDown);    tracer.trace(totalElapsed, "EJB Client", className, methodName,      "Total Elapsed", totalElapsed);    return returnValue;   } else {    return invocation.invokeNext();   } }

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

时间:2011-02-13 IBM Nicholas Whitehead

服务器端截取程序在概念上是类似的,不同的是为了避免使例子过于复杂,它使用了本地线程来检查 reentrancy — 相同的请求处理线程在同一远程调用中不只一次调用相同的 EJB(和截取程序)。该截取程序忽略了除第一个请求之外的所有请求的跟踪和上下文处理。清单 8 展示了服务器端截取程序的 invoke 方法:

清单 8. 服务器端截取程序的 invoke 方法

/** * The interception invocation point. * @param invocation The encapsulated invocation. * @retur

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