快速业务通道

AOP@Work: 用AspectJ进行性能监视,第1部分 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-15
PerfStats interface. */ public class PerfStatsImpl implements PerfStats {  private int accumulatedTime=0L;  private int maxTime=0L;  private int count=0;  public void recordExecution(long start, long end) {    int time = (int) (getTime()-start);    accumulatedTime += time;     maxTime = Math.max(time, maxTime);    count++;  }   public void reset() {    accumulatedTime=0L;     maxTime=0L;    count=0;  }  int getAccumulatedTime () { return accumulatedTime; }  int getMaxTime() { return maxTime; }  int getCount() { return count; } } public interface PerfStatsFactory {   PerfStats     createTopLevelOperationStats(Object type, Object key); }

AOP@Work: 用AspectJ进行性能监视,第1部分(4)

时间:2011-09-07 IBM Ron Bodkin

可以看到,第一个版本相当基础。HttpServletMonitor 定义了一个切入点, 叫作 monitoredOperation,它匹配 HttpServlet 接口上任何名称以 do 开始的 方法的执行。这些方法通常是 doGet() 和 doPost(),但是通过匹配 doHead() 、 doDelete()、doOptions()、doPut() 和 doTrace(),它也可以捕捉不常用的 HTTP 请求选项。

每当其中一个操作执行的时候,系统都会执行 around 通知去监视性能。建 议 启动一个秒表,然后让原始请求继续进行。之后,通知停止秒表并查询与指定操 作对应的性能统计对象。然后它再调用 PerfStats 接口的 recordExecution() , 记录操作经历的时间。这仅仅更新指定操作的总时间、最大时间(如果适用)以 及执行次数。自然也可以把这种方式扩展成计算额外的统计值,并在问题可能发 生的地方保存单独的数据点。

我在方面中使用了一个哈希图为每种操作处理程序保存累计统计值。在这个 版 本中,操作处理程序是 HttpServlet 的子类,所以 servlet 的类被用作键。我 还用术语 操作 表示 Web 请求,以便把它与应用程序可能产生的其他请求(例 如 ,数据库请求)区分开。在这篇文章的第二部分,我将扩展这种方式,来解决更 常见的在控制器中使用的基于类或方法的跟踪操作情况,例如 Apache Struts 的 动作类或 Spring 的多动作控制器方法。

公开性能数据

一旦捕捉到了性能数据,让它可以使用的方式就很多了。最简单的方式就是 把 信息定期地写入日志文件。也可以把信息装入数据库进行分析。由于不增加延迟 、复杂性以及合计、日志及处理信息的开销,提供到即时系统数据的直接访问通 常会更好。在下一节中我将介绍如何做到这一点。

我想使用一个现有管理工作能够显示和跟踪的标准协议,所以我将用 JMX API 来共享性能统计值。使用 JMX 意味着每个性能统计实例都会公开成一个管理 bean,从而提供详细的性能数据。标准的 JMX 客户端(像 Sun 公司的 JConsole )也能够显示这些信息。请参阅 参考资料 学习有关 JMX 的更多内容。

图 3 是一幅 JConsole 的截屏,显示了 Glassbox Inspector 监视 Duke 书 店示例应用程序性能的情况。(请参阅 参考资料)。清单 2 显示了实现这个特 性的代码。

图 3. 用 Glassbox Inspector 查看操作统计值

AOP@Work: 用AspectJ进行性能监视,第1部分 - 编程入门网

传统上,支持 JMX 包括用样本代码实现模式。在这种情况下,我将把 JMX 与 AspectJ 结合,这个结合可以让我独立地编写管理逻辑。

AOP@Work: 用AspectJ进行性能监视,第1部分(5)

时间:2011-09-07 IBM Ron Bodkin

清单 2. 实现 JMX 管理特性

/** Reusable aspect that automatically registers * beans for management */ public aspect JmxManagement { /** Defines classes to be managed and * defines basic management operation */ p

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