Tomcat 8使用deployWAR缓慢启动

时间:2015-01-26 10:30:49

标签: performance tomcat

我从Tomcat 7.0.54升级到8.0.15,将openSSL升级到1.0.1k,使用APR 1.5.1将tcnative升级到最新的1.1.32。

然而,Tomcat现在比以前慢了大约2到3倍。最值得注意的是,部署WAR文件需要更长的时间。

Tomcat 7

Jan 20, 2015 3:39:36 PM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deployment of web application archive <PATH>\file.war has finished in 433 ms

Tomcat 8

Jan 21, 2015 2:27:01 PM org.apache.catalina.startup.HostConfig deployWAR
INFO: Deployment of web application archive <PATH>\file.war has finished in 4,310 ms

所有WAR文件都会发生这种情况,所有这些都是从毫秒到大约5秒。

我从server.xml中删除了JasperListener,因为它似乎已被删除。

unpackWARs="false"
autoDeploy="true"
如果设置为true(至少不显着),

unpackWars没有区别。 我认为它可能是8.0.17中修复的注释扫描问题,但没有运气。

我注意到catalina.properties中的jarsToSkip已从

更改
tomcat.util.scan.DefaultJarScanner.jarsToSkip to
tomcat.util.scan.StandardJarScanFilter.jarsToSkip

那 删除了org.apache.catalina.startup.TldConfig.jarsToSkip并转到context.xml

<JarScanner>
    <JarScanFilter tldSkip="websocket-api.jar,tomcat-websocket.jar"/>
</JarScanner>

然而,这似乎都没有让我回到tomcat 7的表现。确实这样做的一个动作是删除websocket jar。但是我们需要它们。这使我得出结论,即使它们仍然被扫描,即使它们应该被跳过。

我错过了什么吗? context.xml与catalina.properties jarsToSkip不一样吗?

4 个答案:

答案 0 :(得分:7)

对我来说,缓慢启动的解决方案就是放弃 在conf / context.xml中:

<Context>
    <JarScanner>
        <JarScanFilter defaultPluggabilityScan="false" />
    </JarScanner>
</Context> 

来源: https://groups.google.com/a/apereo.org/forum/#!topic/sakai-dev/cjtYGxd6hG0

答案 1 :(得分:1)

我在这里遇到类似的问题。

改善启动时间的一个选择是添加:

metadata-complete="true"

到web.xml(webapp元素),如http://wiki.apache.org/tomcat/HowTo/FasterStartUp中所建议的那样。这假设您的web.xml就是您的Web应用程序需要启动的所有内容。

它并没有完全解决我的问题,但启动速度的提升是相当可观的。

答案 2 :(得分:0)

你确定unpackWARs =“true”对你没什么影响吗?

在bugzilla中有关于此主题的持续讨论:

https://issues.apache.org/bugzilla/show_bug.cgi?id=57251

已经确定,当unpackWARs =“false”时,Tomcat 8的行为将明显变慢,因为代码中执行的实现简化。

答案 3 :(得分:0)

您可以通过更改来尝试并行启动 在conf/server.xml 主机元素属性<Host ... startStopThreads="0"/>