当前位置: 首页 > 知识库问答 >
问题:

优化tomcat启动时间

阳文轩
2023-03-14

我的应用程序非常大,例如,在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

该应用程序依赖于web片段和注释来正确启动。

我尝试了以下方法来跳过13秒的扫描时间:

>

  • 修改<code>conf/context。属性为logEffectiveWebXml=“true”的xml

    卡特琳娜运行 2

    从< code>web-complete.log中提取< code>web.xml片段,将其保存在< code > web apps \ ROOT \ we b-INF \ web . XML 下

    如果我启动我的应用程序,我仍然看到13秒的扫描时间。元数据完成在上面的片段中已经设置为“true”。

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

    <absolute-ordering />
    

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

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

    3)尽管我的web.xml已完成,为什么不允许应用程序启动?

    谢谢

  • 共有2个答案

    蒲曦
    2023-03-14

    回答我自己的问题:

    2) 您能解释为什么将metadata complete设置为true无助于减少13秒吗?

    元数据完成属性不直接控制类注释扫描。它控制是否会发现网络片段,然后反过来将扫描这些片段中包含的类。

    如果在中启用了相同的web片段

    因此,改变metadata-complete的值本身不会对展开的war部署/类扫描产生影响。只有指定了webfragments,更改才会发生。

    作为副作用,不会扫描不属于 Web 裂缝的 jar,这可能会导致 TLD 中的注释类出现问题。因此,应用程序的所有组件都必须是 Web 片段,以便从此优化中受益。

    3)虽然我的web.xml是完整的,为什么它不允许应用程序启动?

    如果在conf/context.xml上设置了logeffectiveWebXml="true"选项,则仅记录侦听器和过滤器。未指定ServletContainerLaunalizers(SCI)。

    如果

    周泰
    2023-03-14

    你可能会认为,默认情况下,Tomcat 在部署 web 应用时执行了一些低效操作,如果你进行了正确的更改,你可以绕过它,让你的 web 应用启动得更快。这些都不是可以安全作出的假设。Tomcat往往非常高效,甚至可以处理大型Web应用程序。

    在我看来,您的Web应用程序足够大,JDK无法在不到13秒的时间内加载大量的类并实例化大量的对象。时间可能主要用于实例化

    我不知道为什么你的webapp不能从一个静态的元数据完整的部署描述符开始,部分原因是你没有告诉它当它失败时,它会以什么特定的方式失败。但是,很可能通过将metadata-complete设置为true,您已经绕过了webapp启动所依赖的一个必要部分。

    潜在的启动优化

    您可以专门为您的大型webapp配置一些可以节省Tomcat查看webapp文件的大量时间的东西是:跳过您知道Tomcat不应该扫描某些东西的JAR,例如Servlet 3片段和TLD。看看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
    

    添加Tomcat搜索这些JAR时应跳过的所有JAR,我猜Tomcat启动Web应用程序的部分将更快完成。提前多少取决于网络应用程序。

     类似资料:
    • 我想抓住tomcat的“XXms中的服务器启动”(在http://svn.apache.org/repos/asf/tomcat/tc6.0.x/trunk/java/org/apache/catalina/startup/Catalina.java)并将其记录到其他地方。 有没有一种方法可以获取该值或一个钩子来包装start()函数?我不需要确切的数字,但它需要相当接近。 如果可能的话,我宁愿不

    • 本文向大家介绍Android 优化之app启动优化的实现,包括了Android 优化之app启动优化的实现的使用技巧和注意事项,需要的朋友参考一下 App 启动方式 冷启动 App 没有启动过或 App 进程被杀,系统中不存在该 App 进程,此时启动即为冷启动。需要创建 App 进程,加载相关资源,启动 Main Thread,初始化首屏 Activity 等。在这个过程中,屏幕会显示一个空白的

    • 我试图在xampp控制面板v3.2.1上用xampp 1.8.3启动tomcat,但出现了以下错误: Tomcat启动/停止错误,返回代码:1确保您安装了JavaJDK或JRE,并且所需的端口是免费的查看“/xampp/tomcat/logs”文件夹了解更多信息 谁能帮帮我?我正在用windows 7 如果我的英语不完美,我很抱歉

    • 我正在使用谷歌抽屉布局。 当一个项目被点击时,抽屉被顺利关闭,并且会启动一个。将这些活动变成不是一个选项。正因为如此,启动一个活动然后关闭抽屉也不是一个选项。关闭抽屉和同时启动活动会使关闭动画结巴。 鉴于我想先顺利关闭它,然后启动活动,我对用户单击抽屉项目和他们看到他们想要去的活动之间的延迟存在问题。 这就是每个项目的单击侦听器的外观。 我的活动也是DrawerListener,它的方法如下所示:

    • 启动时,控制台显示没有错误: 自动打开的页面显示如下: 我还尝试了,显示了相同的输出。 而且很有效。

    • 我用apache-beam做了几个测试,使用了自动缩放工作人员和1个工作人员,每次我看到启动时间大约为2分钟。是否有可能缩短启动时间,如果有,建议哪些最佳做法来缩短启动时间?