1

我的 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 服务器/客户端所需的时间

任何想法/线索?

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

期待您的想法/建议

4

2 回答 2

0

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

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

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

于 2011-11-05T07:09:11.130 回答
0

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

于 2012-03-12T18:49:32.340 回答