优化tomcat启动时间

loi*_*gan 7 java tomcat startup

我的应用程序非常庞大,例如在web-inf/lib中包含310个jar,总共100Mb.启动服务器,此步骤需要13秒:

Sep 16, 2014 1:05:33 PM org.apache.catalina.startup.HostConfig deployDirectory
INFO: Deploying web application directory C:\apache-tomcat-7.0.47\webapps\ROOT
Run Code Online (Sandbox Code Playgroud)

应用程序依赖于Web片段和注释来正确启动.

我尝试了以下内容以跳过13s扫描时间:

  • 修改 conf/context.xml with attribute logEffectiveWebXml="true"

  • catalina run 2> web-complete.log

  • 从中提取web.xml片段web-complete.log,将其保存在下webapps\ROOT\web-inf\web.xml

如果我开始申请,我仍然会看到13秒的扫描时间.在上面的snipet中,metadata-complete已经设置为"true".

将以下语句添加到web.xml后,完全跳过13s,但这次我的应用程序无法再启动:

<absolute-ordering />
Run Code Online (Sandbox Code Playgroud)

1)在我的情况下,使tomcat快速启动的正确方法是什么?

2)你能解释为什么元数据完整对13s没有帮助吗?

3)Altough我的web.xml完成​​后,为什么不允许应用程序启动?

谢谢,

Yav*_*in5 8

您可能认为默认情况下,Tomcat在部署您的Web应用程序时执行的操作效率低下,如果您做出正确的更改,您可以在其周围进行修改并使您的Web应用程序启动速度更快.这些都不是安全的假设.Tomcat往往非常高效,甚至处理大型Web应用程序.

听起来像你的webapp足够大,JDK无法加载大量的类,并在13秒内实现大量的对象.时间可能主要用于实例化和初始化servlet及其所需的所有内容,如果您的webapp在提供请求之前有许多大型子系统要初始化,那么这是一项非常大的工作.完成所有这些操作肯定需要几十秒,在此期间,解析配置文件所花费的时间不多,甚至打开JAR来查找和解析一些.

为什么你的webapp无法以静态元数据完整部署描述符开始,我不知道,部分原因是你没有说它失败时失败的具体方式.但是,通过将metadata-complete设置为true,您可能已经绕过了webapp所依赖的webapp启动的必要部分.

潜在的启动优化

您可能专门为大型Web应用程序配置的可以节省Tomcat大量时间查看Web应用程序文件的内容是:跳过您知道Tomcat不应扫描某些内容(例如Servlet 3片段和TLD)的JAR.看看你的Tomcat的conf/catalina.properties文件..这些可配置的系统属性在那里:

# Additional JARs (over and above the default JARs listed above) to skip when
# scanning for Servlet 3.0 pluggability features. These features include web
# fragments, annotations, SCIs and classes that match @HandlesTypes. The list
# must be a comma separated list of JAR file names.
org.apache.catalina.startup.ContextConfig.jarsToSkip=

# Additional JARs (over and above the default JARs listed above) to skip when
# scanning for TLDs. The list must be a comma separated list of JAR file names.
org.apache.catalina.startup.TldConfig.jarsToSkip=tomcat7-websocket.jar
Run Code Online (Sandbox Code Playgroud)

添加Tomcat搜索这些JAR时应该跳过的所有JAR,我的猜测是Tomcat启动webapp的部分将更快完成.多快取决于webapp.