温馨提示×

如何在Ubuntu中优化Tomcat启动速度

小樊
42
2025-11-29 08:11:45
栏目: 智能运维

Ubuntu下Tomcat启动加速的实用清单

一 定位瓶颈

  • 查看日志定位卡点:执行 journalctl -u tomcat9.service -b 或查看 catalina.out,若见到类似 “Creation of SecureRandom instance … took [xxx] ms” 的提示,说明启动慢主要在 SecureRandom 初始化(常见于熵源不足)。
  • 前台运行观察:在 Tomcat 的 bin 目录前台启动 ./catalina.sh run,可实时看到初始化阶段停顿位置。
  • 快速自检熵源:执行 cat /proc/sys/kernel/random/entropy_avail,数值偏低(如低于 100)时更易出现该问题。

二 快速见效的修复 SecureRandom 阻塞

  • 方式A(推荐,非阻塞熵源):在 Tomcat 的 JVM 参数中加入 -Djava.security.egd=file:/dev/./urandom,例如在 bin/catalina.shJAVA_OPTS 中追加该参数。
  • 方式B(系统级增强熵池):安装并启动熵服务,提升 /dev/random 可用性。
    • Ubuntu/Debian:sudo apt-get install -y rng-tools && sudo systemctl start rng-tools && sudo systemctl enable rng-tools
  • 方式C(修改JDK配置,备选):编辑 $JAVA_HOME/jre/lib/security/java.security,将
    securerandom.source=file:/dev/random 改为 securerandom.source=file:/dev/./urandom
  • 说明:方式A与C本质相同,均让 JVM 使用非阻塞熵源;方式B从系统层面补充熵,适合云主机等熵源匮乏环境。

三 调整JVM与连接器参数

  • 合理设置堆与GC:在 catalina.sh 中配置 JAVA_OPTS,示例:
    • -server -Xms1024m -Xmx1024m(将 -Xms-Xmx 设为相同可减少堆伸缩抖动)
    • 垃圾回收器:JDK 8 可用 -XX:+UseG1GC;多核且注重吞吐可用 -XX:+UseParallelGC
  • 连接器并发与解析:编辑 conf/server.xml<Connector>,示例:
    • maxThreads="200" minSpareThreads="50" acceptCount="250"(按并发量调优)
    • enableLookups="false"(禁用DNS反查,减少阻塞)
    • URIEncoding="UTF-8"(避免中文乱码)
  • 注意:Java 8 使用 Metaspace 而非永久代,如需设置请使用 -XX:MetaspaceSize-XX:MaxMetaspaceSize,不要再用 -XX:PermSize/MaxPermSize

四 精简应用与系统层面优化

  • 精简Web应用:删除 webapps 下不需要的示例与无用应用;在应用的 WEB-INF/web.xml 中将 metadata-complete="true" 可减少注解/组件扫描时间。
  • 减少启动日志噪声与磁盘压力:定期清理 systemd 日志,例如 sudo journalctl --vacuum-size=100M
  • 提升I/O与网络就绪度:将 Tomcat 数据与日志放在 SSD;按需调高系统网络参数(如 net.core.somaxconnnet.ipv4.tcp_max_syn_backlog),并提升文件描述符限制(ulimit -n 或在 /etc/security/limits.conf 中设置)。

五 一键检查与回滚建议

  • 检查生效:重启后在日志中确认已出现 -Djava.security.egd=file:/dev/./urandom;执行 ps -ef | grep tomcat 应能看到该JVM参数。
  • 回滚路径:
    • 移除 JAVA_OPTS 中的 -Djava.security.egd 或将 java.security 恢复为 file:/dev/random
    • 停止熵服务:sudo systemctl disable --now rng-tools
    • 恢复 server.xmlcatalina.sh 的原始配置。
  • 风险提示:修改系统服务与JVM参数前请先备份;在生产环境变更后观察一段时间,确保无功能与稳定性回退。

0