1

有没有人知道为什么Grails 应用程序在 tomcat(6 和 7)中的运行速度比 via慢 4 倍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 在非调试模式下运行(Ubuntu 13.04 默认设置 + -XX:MaxPermSize=512m
  • 相同的 Java 版本

更新

看起来以下在 Tomcat 中运行速度慢了大约 12 倍:

XPathFactory.newInstance().newXPath()

......我是,嗯,经常打电话。好吧,现在已经解决了,但我仍然想知道:

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

1 回答 1

1

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

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

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

于 2013-09-06T09:40:11.857 回答