深入拆解 Tomcat & Jetty
李号双
eBay 技术主管
38890 人已学习
新⼈⾸单¥68
登录后,你可以任选4讲全文学习
课程目录
已完结/共 45 讲
开篇词 (1讲)
深入拆解 Tomcat & Jetty
15
15
1.0x
00:00/00:00
登录|注册

12 | 实战:优化并提高Tomcat启动速度

清理其他文件
清理JAR文件
清理XML配置文件
清理不必要的Web应用
并行启动多个Web应用
随机数熵源优化
配置Web-Fragment扫描
禁止Servlet注解扫描
关闭JSP支持
关闭WebSocket支持
禁止Tomcat TLD扫描
清理Tomcat
如何优化并提高Tomcat启动速度?

该思维导图由 AI 生成,仅供参考

到目前为止,我们学习了 Tomcat 和 Jetty 的整体架构,还知道了 Tomcat 是如何启动起来的,今天我们来聊一个比较轻松的话题:如何优化并提高 Tomcat 的启动速度。
我们在使用 Tomcat 时可能会碰到启动比较慢的问题,比如我们的系统发布新版本上线时,可能需要重启服务,这个时候我们希望 Tomcat 能快速启动起来提供服务。其实关于如何让 Tomcat 启动变快,官方网站有专门的文章来介绍这个话题。下面我也针对 Tomcat 8.5 和 9.0 版本,给出几条非常明确的建议,可以现学现用。

清理你的 Tomcat

1. 清理不必要的 Web 应用
首先我们要做的是删除掉 webapps 文件夹下不需要的工程,一般是 host-manager、example、doc 等这些默认的工程,可能还有以前添加的但现在用不着的工程,最好把这些全都删除掉。如果你看过 Tomcat 的启动日志,可以发现每次启动 Tomcat,都会重新布署这些工程。
2. 清理 XML 配置文件
我们知道 Tomcat 在启动的时候会解析所有的 XML 配置文件,但 XML 解析的代价可不小,因此我们要尽量保持配置文件的简洁,需要解析的东西越少,速度自然就会越快。
3. 清理 JAR 文件
我们还可以删除所有不需要的 JAR 文件。JVM 的类加载器在加载类时,需要查找每一个 JAR 文件,去找到所需要的类。如果删除了不需要的 JAR 文件,查找的速度就会快一些。这里请注意:Web 应用中的 lib 目录下不应该出现 Servlet API 或者 Tomcat 自身的 JAR,这些 JAR 由 Tomcat 负责提供。如果你是使用 Maven 来构建你的应用,对 Servlet API 的依赖应该指定为<scope>provided</scope>
确认放弃笔记?
放弃后所记笔记将不保留。
新功能上线,你的历史笔记已初始化为私密笔记,是否一键批量公开?
批量公开的笔记不会为你同步至部落
公开
同步至部落
取消
完成
0/2000
荧光笔
直线
曲线
笔记
复制
AI
  • 深入了解
  • 翻译
    • 英语
    • 中文简体
    • 中文繁体
    • 法语
    • 德语
    • 日语
    • 韩语
    • 俄语
    • 西班牙语
    • 阿拉伯语
  • 解释
  • 总结

本文介绍了如何优化并提高Tomcat的启动速度。首先,作者提到了清理Tomcat,包括删除不必要的Web应用、清理XML配置文件、清理JAR文件和其他文件,以及禁止Tomcat TLD扫描、关闭WebSocket支持和JSP支持等方法。此外,还介绍了禁止Servlet注解扫描和配置Web-Fragment扫描的方法。作者还提到了随机数熵源优化和并行启动多个Web应用的技巧。这些方法可以帮助读者优化Tomcat的启动速度,提高系统性能。

仅可试看部分内容,如需阅读全部内容,请付费购买文章所属专栏
《深入拆解 Tomcat & Jetty 》
新⼈⾸单¥68
立即购买
登录 后留言

全部留言(18)

  • 最新
  • 精选
  • 王盛武
    调大vm xms xmx避免反复扩容堆内存 换上固态硬盘可以提速xml文件读取 server.xml去掉监听 去掉不要的ajp 去掉多余的连接器 线程池的核心线程设置延迟初始化 去掉access log,因为nginx里已有access log 减少项目里多余的jar 精确设置mvc注解的包扫描范围 xml spring bean设置延迟初始化 数据库连接池初始化数量减少

    作者回复: 👍

    2019-06-09
    5
    58
  • 刘冬
    请问老师,对于SpringBoot内嵌的Tomcat,怎么来优化呢?

    作者回复: 在Springboot里配置文章里提到的那些参数,比如: server.tomcat.additional-tld-skip-patterns: xxx*.jar 或者通过TomcatServletWebServerFactory来修改参数 @Bean public TomcatServletWebServerFactory tomcatFactory() { return new TomcatServletWebServerFactory() { @Override protected void postProcessContext(Context context) { ((StandardJarScanner) context.getJarScanner()).setScanManifest(false); } }; }

    2019-06-06
    37
  • Shine
    老师,这种tomcat启动优化很少用到吧。貌似很多人都不太关心tomcat启动优化

    作者回复: 重启和部署服务的时候,启动快的话能减少downtime。

    2019-06-08
    5
    10
  • 君哥聊技术
    startStopThreads 的值表示你想用多少个线程来启动你的 Web 应用,如果设成 0 表示你要并行启动 Web 应用,像下面这样的配置。 startStopThreads=0默认会用多少个线程呢?是会用系统所有能调度的线程吗?

    作者回复: Server 有一个专门的线程池来叫做utilityExecutor,来跑这些任务,在这个线程池创建startStopThreads个数的线程。默认是2个。

    2019-06-06
    6
  • vvsuperman
    压测的时8c8g,做的mock请求(空请求,立即返回),并发500 tomcat 8 tps才600,如何提高tps呢?

    作者回复: 空请求没有IO等待,可以试试把线程池的线程数调小一点,减少线程切换开销,看有没有帮助

    2019-06-17
    2
    2
  • 小呆娃
    老师,请教您一个问题,tomcat启动的时候卡在loadClass,这个一般是什么问题呢?能给个排查的思路吗?谢谢老师

    作者回复: 用jstack看堆栈信息看具体卡在哪一行。

    2019-06-09
    2
  • 为什么要删除logs下不需要的日志文件

    作者回复: 文件越大,占磁盘空间

    2019-06-12
    1
  • 小胖
    双哥能出个netty或者dubbo专栏吗😍
    2020-07-03
    5
  • lulu
    请教一个问题。我对应用进行服务器的迁移,从上海机房迁移北京机房。发现Tomcat启动变得非常慢。原来在上海机房部署应用的Tomcat启动20482 ms,现在在北京机房216643 ms,时间变成了10倍。已经排除了redis、mysql连接的问题。也不是安全随机数慢的问题。通过strace、jstack也没有找到什么原因。请问老师我改怎么调查,怎么解决。谢谢。
    2020-09-20
    3
    2
  • Visual C++
    我的环境是docker centos tomcat8,按你设置,还要20妙启动
    2019-06-12
    2
    1
收起评论
显示
设置
留言
18
收藏
沉浸
阅读
分享
手机端
快捷键
回顶部