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

时间:2011-10-12 02:23:06

标签: apache tomcat time request mod-jk

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

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

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

使用* mod_JK logging *:我理解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服务器/客户端

任何想法/线索?

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

期待您的想法/建议

2 个答案:

答案 0 :(得分:0)

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

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

因此,当您在处理链的最开始(过滤器在此处运行良好)时收到请求时,您需要启动计时器,并在每次发送查询时停止。然后在查询后再次重新开始。这当然不能100%完成,特别是在你使用透明的ORM如hibernate的情况下。那是因为有时你可能间接地执行查询,即通过普通Java遍历集合或关联时。

答案 1 :(得分:0)

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