温馨提示×

如何在Ubuntu上优化Tomcat的启动速度

小樊
40
2025-12-30 18:16:11
栏目: 智能运维

Ubuntu上优化Tomcat启动速度的实用方案

一 定位瓶颈

  • 查看启动日志中是否出现类似:Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [142,673] milliseconds。这类日志通常意味着启动被熵源不足阻塞。
  • 使用系统监控确认资源是否空闲:CPU、IO、内存均正常但启动仍慢,多半是SecureRandom/熵池问题;若部署了大量应用,也可能是应用初始化耗时。
  • 检查是否加载了不必要的应用与组件(如默认示例、管理应用、JSP/WebSocket等),这些都会增加启动扫描与初始化时间。

二 快速见效的优化

  • 使用非阻塞熵源启动参数
    $CATALINA_HOME/bin/setenv.sh(没有则新建)加入:
    export JAVA_OPTS=“$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom”
    说明:部分 JDK 版本对 securerandom.source 的处理存在兼容性,使用“/dev/./urandom”可规避直接使用 /dev/random 导致的阻塞。
  • 提升系统熵池可用性(硬件熵源不足时)
    安装并启动熵服务:sudo apt-get install -y rng-tools;sudo service rng-tools start。
    注意:虚拟机/云主机若无硬件 RNG,提升熵池效果有限,优先采用上一条 JVM 参数方案。
  • 减少不必要的应用与组件
    清理 webapps 下不需要的工程(如 docs、examples、host-manager 等);如不使用 JSP/WebSocket,可在 conf/context.xml 关闭相关初始化以缩短扫描时间:


    如不使用 Servlet 3.0 注解扫描,可在应用的 web.xml 设置:
  • 并行启动多个 Web 应用
    conf/server.xml 的 Host 增加:(0 表示按 CPU 核心数并行)。
  • 合理设置 JVM 内存避免频繁 GC
    在 setenv.sh 中设置初始与最大堆一致(减少扩容抖动),例如:
    export JAVA_OPTS=“$JAVA_OPTS -Xms1g -Xmx1g -XX:+UseG1GC”(Java 8+ 推荐 G1)。
    说明:堆过小会导致频繁 GC、拖慢启动;过大则增加 GC 停顿时间,需结合物理内存与业务对象规模调优。

三 配置示例

  • setenv.sh(放置于 $CATALINA_HOME/bin/) #!/usr/bin/env bash export JAVA_OPTS=“$JAVA_OPTS
    -Dfile.encoding=UTF-8
    -server
    -Xms1g -Xmx1g
    -XX:+UseG1GC
    -Djava.security.egd=file:/dev/./urandom”

  • server.xml 片段(按需调整)

  • 可选:关闭 JSP/WebSocket 初始化(如确实不需要)

四 验证与注意事项

  • 验证熵源优化是否生效
    重启后在 catalina.out 中搜索 SecureRandom,若创建耗时从“十几万毫秒”下降到“几十或几百毫秒”,说明优化有效。
  • 验证并行启动
    观察多个应用的部署日志时间戳是否接近,而非严格串行。
  • 生产注意点
    使用 /dev/urandom 或 EGD 属于“可用性优先”的权衡,绝大多数 Web 场景可接受;如业务对密码学强随机有极高要求,应评估安全影响后再决定。
  • 其他通用项
    避免一次部署过多应用;精简不必要的 JAR 与 XML 配置;必要时开启 GC 日志以便进一步诊断(仅在排障阶段开启,避免影响性能)。

0