温馨提示×

centos tomcat启动慢怎么加速

小樊
41
2025-12-05 16:10:05
栏目: 智能运维

CentOS 上 Tomcat 启动慢的定位与加速

一、先快速定位瓶颈

  • 查看 catalina.outlocalhost-startStop-1 日志,若出现类似:
    “Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [55,507] milliseconds”,基本可判定为熵池不足导致随机数生成阻塞。
  • 检查系统熵值:
    cat /proc/sys/kernel/random/entropy_avail
    若数值很低(如个位数),说明熵源不足,会显著拖慢启动。

二、优先解决熵源瓶颈(见效最快)

  • 安装并启动熵服务 rng-tools(推荐,安全且可持续供给熵):
    yum install -y rng-tools
    systemctl start rngd
    systemctl enable rngd
    如 CPU 支持 RDRAND,rngd 会用硬件熵源加速。
  • 临时方案 A:修改 $JAVA_HOME/jre/lib/security/java.security
    将 securerandom.source=file:/dev/random 改为 securerandom.source=file:/dev/urandom
  • 临时方案 B:在 $CATALINA_HOME/bin/catalina.sh 的 JAVA_OPTS 中增加
    -Djava.security.egd=file:/dev/urandom
    说明:/dev/urandom 为非阻塞熵源,能显著缩短 SecureRandom 初始化时间;rngd 方案更稳妥,适合生产。
  • 验证:重启 Tomcat,观察日志中 SecureRandom 初始化耗时是否从“秒级/数十秒级”降到“毫秒级”。

三、减少应用扫描与部署开销

  • 清理 webapps 下不需要的应用(如 docs、examples、host-manager、manager),减少类加载与扫描。
  • 优化 server.xml 的 Host 配置,降低启动时自动部署压力:
  • 若日志出现 “Skipping unneeded JARs during scanning can improve startup time and JSP compilation time”,说明有大量 JAR 被无谓扫描。可:
    • 精简打包,移除无用依赖;
    • 按需配置 TLD/JSP 扫描范围,避免全量扫描。

四、Tomcat 与 JVM 参数优化

  • 连接器与 I/O:使用 NIO 提升并发与启动阶段的连接处理能力。
    示例:
  • JVM 内存起步:在 catalina.sh 中设置合理的堆与栈,避免频繁扩容带来的抖动:
    JAVA_OPTS=“$JAVA_OPTS -Xms1024m -Xmx1024m -Xss512k -Djava.awt.headless=true”
  • 说明:内存应与物理内存匹配,生产环境建议固定堆大小(Xms=Xmx),减少 GC 与扩容开销。

五、系统层面与内核参数优化

  • 文件描述符限制:编辑 /etc/security/limits.conf
    • soft nofile 65536
    • hard nofile 65536
  • 内核网络与文件句柄:编辑 /etc/sysctl.conf
    net.core.somaxconn 65535
    net.ipv4.tcp_tw_reuse 1
    fs.file-max 65536
    执行 sysctl -p 使配置生效。
  • 透明大页(THP):部分环境下会拖慢 JVM 初始化,建议禁用:
    echo never > /sys/kernel/mm/transparent_hugepage/enabled
    echo never > /sys/kernel/mm/transparent_hugepage/defrag
    如需持久化,可加入开机启动脚本。

0