Java运行时监控,第2部分: 编译后插装和性能监控 - 编程入门网
Impl();
// Not Spring Managed, so dependency is set manually
daoDirect.setDataSource(dataSource);
for(int i = 0; i < 100000; i++) {
emps = daoIntercepted.get(empIds);
log("(Interceptor) Acquired ", emps.size(), " Employees");
emps = daoOptimizedIntercepted.get(empIds);
log("(Optimized Interceptor) Acquired ", emps.size(), "
Employees");
tracer.startThreadInfoCapture(WAIT+BLOCK);
emps = daoNoInterceptor.get(empIds);
log("(Non Intercepted) Acquired ", emps.size(), " Employees");
tracer.endThreadInfoCapture("Spring", "DAO",
"No Interceptor DAO", "get");
tracer.traceIncident("Spring", "DAO",
"No Interceptor DAO", "get", "Responses Per Interval");
tracer.startThreadInfoCapture(WAIT+BLOCK);
emps = daoDirect.get(empIds);
log("(Direct) Acquired ", emps.size(), " Employees");
tracer.endThreadInfoCapture("Spring", "DAO",
"Direct", "get");
tracer.traceIncident("Spring", "DAO", "Direct",
"get", "Responses Per Interval");
}
Java运行时监控,第2部分: 编译后插装和性能监控(12)时间:2011-02-13 IBM Nicholas Whitehead由 APM 系统报告的结果展示出了几个类似的项。表 1 表明了来自每一个 Spring bean 的调用在测试运行中的平均运行时间: 表 1. Spring 截取程序测试运行结果
图 7 显示了在 APM 中为测试用例创建的指标树。 图 7. Spring 截取程序在测试运行中的 APM 指标树 图 8 以图表的形式显示了该数据: 图 8. Spring 截取程序测试运行结果 很明显,这些结果相当紧密地聚集在了一起,但有一些模式显现了出来。优化的截取程序的确稍微胜过了未优化的截取程序。然而,在这个测试运行中只运行了一个线程,所以比较分析的用处并不大。在下一节中,我将详述这个测验用例并实现多个线程。 Java运行时监控,第2部分: 编译后插装和性能监控(13)时间:2011-02-13 IBM Nicholas Whitehead通过类包装实现的 JDBC 插装 我发现造成大多数典型企业 Java 应用程序的慢性性能问题的根本原因在于数据库接口。通过 JDBC 的数据库调用或许是最普通的从 JVM 到外部服务的调用,目的是获取 JVM 中在本地不可用的数据集或资源。所以问题的起因在于数据库接口也不足为奇。逻辑上,在这种场景中可能出现问题的是数据库客户机、数据库本身或者两者兼有。然而,很多数据库的面向客户机的应用程序被许多性能反模式所困扰,包括: 逻辑 |
|||||||||||||||||||||||||
凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢! |