【问题标题】:Measuring Request processing time at JBoss server using Mod_JK使用 Mod_JK 测量 JBoss 服务器上的请求处理时间
【发布时间】:2011-10-12 02:23:05
【问题描述】:

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

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

我一直在研究如何仅在应用层上记录请求处理时间。我发现 *mod_JK logging*、*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 构造的模式属性中设置 %D 来记录“处理请求所花费的时间,以毫秒为单位”。这个不是很清楚

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

有什么想法/线索吗?

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

期待您的想法/建议

【问题讨论】:

    标签: apache tomcat time request mod-jk


    【解决方案1】:

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

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

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

    【讨论】:

    • 感谢 Cherouvim 的有趣观点。排除数据库时间有助于确定瓶颈在哪里;在应用程序服务器或数据库服务器上。在大多数情况下,不排除数据库时间,但这是我正在运行的应用程序的一个特殊情况。你概述的方式是我想到的,但我预计会有相当大的性能开销。我什至在寻找能够自然地进行这种测量的现有工具/服务器配置。我不想更改应用程序或服务器代码..所以应该有一个插件左右
    【解决方案2】:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-09-01
      • 1970-01-01
      • 1970-01-01
      • 2013-02-25
      • 2015-07-23
      • 1970-01-01
      • 2023-03-19
      • 2015-01-02
      相关资源
      最近更新 更多