在 Tomcat 上部署 Grails 应用程序很慢

Deploying Grails applications on Tomcat is slow

我使用 Grails framework(版本 2.3.7)开发了许多不同的 Web 服务。每个 Web 服务做不同的事情,有些简单,有些复杂。有些只有很少的依赖项(插件等),有些则很多。

对于生产,我将每个 service/application 部署在 Tomcat 7 上,每个部署在不同的 VM 上。为此,我首先构建一个 WAR:

> grails war

然后我在 Tomcat 上部署 WAR 作为 ROOT 应用程序 (/var/lib/tomcat7/webapps/ROOT.war)。这很好用。

但是,当(重新)启动 Tomcat 时,部署应用程序通常需要 2-7 分钟,有时甚至更多。我没有注意到应用程序的复杂性和部署时间之间的真正关联。

这么长的部署时间可能是什么原因造成的?我应该注意什么来尝试加速 Tomcat 7 上的 Grails 应用程序部署?

或者这就是我应该期待的并且我应该学会忍受它?

原来这个问题与 "Entropy Source" 有关,如 Tomcat wiki 中有关如何加速启动 Tomcat 的文档所述。所以解决方案是在 Tomcat 配置文件中添加以下 JDK 选项: /etc/default/tomcat7:

-Djava.security.egd=file:/dev/./urandom

现在 Tomcat 可以在大约 20-30 秒内可靠地启动。