繁体   English   中英

使用Mod_JK在JBoss服务器上测量请求处理时间

[英]Measuring Request processing time at JBoss server using Mod_JK

我的Web应用程序体系结构是:Apache 2(作为负载平衡器)+ JBoss 3.2.3 + MySQL 5.0.19。

我要:仅测量在JBoss服务器上花费的请求处理时间(针对每个单独的请求)(即,不包括在Web和数据库服务器上花费的时间)。

我一直在研究如何仅在应用程序层上记录请求处理时间。 我发现* mod_JK日志记录*,* Apache的mod_log_config *和Tomcat AccessLogValve是两种可能的方法。

使用* mod_JK日志记录*:我的理解mod_jk日志记录为每个请求提供了请求处理时间,并根据请求离开Apache服务器的时间与Apache服务器收到相应响应的时间之间的时间差进行计算。 如果这不正确/正确,请纠正我。

使用Apache的mod_log_config模型( http://www.lifeenv.gov.sk/tomcat-docs/jk/config/apache.html ):通过在LogFormat(JKLogFile构造)构造中添加“%{JK_REQUEST_DURATION} n”(请参见以上链接)。 “ JK_REQUEST_DURATION”从Apache角度捕获了Tomcat的总体处理时间。

时间(在上述情况下)包括Tomcat / JBoss + MySQL处理时间。 对于我来说,这无济于事,因为它包括MySQL处理时间-我只想在JBoss上记录请求处理时间。 有任何建议/想法吗?

使用AccessLogValve :通过在AccessLogValve XML构造的pattern属性中设置%D,可以记录“以毫秒为单位的处理请求所花费的时间”。 目前还不清楚

  • 如果此时间是tomcat / JBoss服务请求所需要的时间(例如,分配线程工作程序来处理该时间)
  • 处理请求并将其发送到数据库服务器所花费的时间(Tomcat / JBoss服务器上的总时间)
  • Tomcat / JBoss处理请求并将响应发送回Web服务器/客户端花费的时间

有任何想法/线索吗?

这是我想分享的经验/研究。 如果有人遇到类似的问题/知道一种方法来分享他们的经验/指标/想法,可以找到更好的解决方案,将不胜感激。

期待您的想法/建议

为什么要排除数据库时间? 在数据库上花费的时间就是您的应用程序正在等待的时间,与等待其他资源(例如,lucene索引完成,远程http请求完成等)完全一样。

如果您确实要排除数据库访问时间,则需要使用计时器启动/停止指令来检测应用程序。 这肯定需要进入您的应用程序内部(通过AOP“干净”或通过应用程序关键点中的开始/停止语句手动进行),而不能仅仅是外界的配置(例如apache模块)。

因此,您需要在处理链的最开始处收到请求时启动计时器(此处的过滤器效果很好),并在每次发送查询时停止。 然后恰好在查询后重新开始。 当然,这不可能100%完成,尤其是在使用透明ORM(例如休眠)的情况下。 这是因为有时您可能会间接执行查询,即通过纯Java遍历集合或关联时。

我认为您正在寻找性能分析工具,例如java visualVM,JProfiler或其他..

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM