Grails 性能:Tomcat 中的 XML 处理速度比运行应用程序慢 4 倍



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

A. 情况

我有一个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
  • 相同的爪哇版本
<小时 />

更新

看起来以下内容在 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

相关内容

最新更新