【问题标题】:Grails performance: XML processing 4x slower in tomcat than run-app?Grails 性能:在 tomcat 中的 XML 处理速度比 run-app 慢 4 倍?
【发布时间】:2013-09-08 15:25:43
【问题描述】:

有没有人知道为什么一个 Grails 应用程序在 tomcat 中的运行速度比通过 grails run-app4 倍(6 和 7)?否则,我将不胜感激有关如何自己追踪此问题的一般建议。

情况

我有一个 Web 应用程序,它执行一些相当密集的 XML 处理(解析、xpath、序列化)。对于较大的输入,通过grails dev run-app 运行时返回结果大约需要 5 秒。

当我在 tomcat6 中运行相同的应用程序时慢 4 倍!

grails dev war
cp target/app.war /path/to/tomcat[6|7]/webapps

相同的应用、相同的环境、相同的机器:响应相同的 POST 需要 4 倍的时间(20 秒)

  • tomcat 中没有记录错误;只是我期望的日志输出
  • Tomcat 在非调试模式下运行(Ubuntu 13.04 默认设置 + -XX:MaxPermSize=512m
  • Java 版本相同

更新

以下代码在 Tomcat 中的运行速度似乎慢了大约 12 倍:

XPathFactory.newInstance().newXPath()

...我,嗯,经常这么叫。好吧,现在已经解决了,但我仍然想知道:

  1. 什么可能导致这在 Tomcat 中如此缓慢?
  2. 我可以采取哪些工具/方法来更轻松地实现这一发现? (我做了很多手动调试来解决这个问题。)

【问题讨论】:

  • Java 版本一样吗?

标签: performance tomcat grails tomcat6


【解决方案1】:

服务提供者机制决定使用哪个类作为 XPathFactory 的实现。类路径上包含文件 META-INF/services/javax.xml.xpath.XPathFactory 的 JAR 文件可以替换 JRE 中的默认实现。

在您的情况下,开发和生产环境的类路径很可能不同。

要检查使用了哪个实现,您可以打印XPathFactory.newInstance().newXPath().getClass()。 JRE 中的内部实现是com.sun.org.apache.xpath.internal.jaxp.XPathExpressionImpl

【讨论】:

    猜你喜欢
    • 2018-12-20
    • 2012-07-08
    • 2019-08-05
    • 2012-09-20
    • 2021-04-12
    • 1970-01-01
    • 2020-09-04
    • 2020-03-10
    • 1970-01-01
    相关资源
    最近更新 更多