performance - Grails 性能 : XML processing 4x slower in tomcat than run-app?

标签 performance tomcat grails tomcat6

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

情况

我有一个 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 在非 Debug模式下运行(Ubuntu 13.04 默认设置 + -XX:MaxPermSize=512m)
  • 相同的 Java 版本

更新

看起来下面的代码在 Tomcat 中运行速度大约慢了 12 倍:

XPathFactory.newInstance().newXPath()

... 嗯,我经常这样调用它。好吧,现在已经解决了,但我仍然想知道:

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

最佳答案

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

在您的案例中,开发环境和生产环境的类路径很可能不同。

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

关于performance - Grails 性能 : XML processing 4x slower in tomcat than run-app?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18625399/

相关文章:

performance - AMD:TLB 未命中周期的性能计数器

python - 组合具有相同列值的 pandas DataFrame 的最有效方法

eclipse - tomcat8服务器启动失败报错

java - Vaadin + TabSheet + Grails Service = 当前线程没有 session

grails - 如何使用Intellij Idea将OpenCv与Grails 3配合使用?

python - 如何在 Python + Pygame 中提高帧率 (fps)?

java - 如何延迟在 TextView 中显示文本(逐字逐句)

java - 重新启动 OpenShift 应用程序意味着重置它吗?

eclipse - eclipse 中的Tomcat错误

grails - 为什么在域中更改映射属性不会生成新的变更日志行?