AOP@Work: 用AspectJ进行性能监视,第1部分 - 编程入门网
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 查看操作统计值 传统上,支持 JMX 包括用样本代码实现模式。在这种情况下,我将把 JMX 与 AspectJ 结合,这个结合可以让我独立地编写管理逻辑。 AOP@Work: 用AspectJ进行性能监视,第1部分(5)时间:2011-09-07 IBM Ron Bodkin清单 2. 实现 JMX 管理特性
|
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |