首页主机资讯如何解决Ubuntu Tomcat启动慢

如何解决Ubuntu Tomcat启动慢

时间2025-12-12 13:57:03发布访客分类主机资讯浏览413
导读:Ubuntu 上 Tomcat 启动慢的定位与优化 一、快速定位耗时阶段 查看实时日志,确认是否卡在初始化阶段: 命令:tail -f /var/log/tomcat/catalina.out 或 tail -f /opt/tomcat...

Ubuntu 上 Tomcat 启动慢的定位与优化

一、快速定位耗时阶段

  • 查看实时日志,确认是否卡在初始化阶段:
    • 命令:tail -f /var/log/tomcat/catalina.out 或 tail -f /opt/tomcat/logs/catalina.out
  • 若日志出现如下字样,说明是 SecureRandom 初始化慢:
    • 例如:Creation of SecureRandom instance for session ID generation using [SHA1PRNG] took [253,251] milliseconds.
  • 也可用 grep 快速筛查:grep -i securerandom catalina.out。以上路径和排查方法适用于常见安装位置与默认配置。

二、高概率根因与优先修复 SecureRandom 阻塞

  • 原因说明:Tomcat 在创建会话 ID 时会实例化 SecureRandom。在部分 Linux/Ubuntu 环境中,默认使用 /dev/random 作为熵源;当系统熵不足时,读取会被阻塞,导致启动显著变慢。
  • 解决方案(任选其一,推荐前两种):
    1. 在 Tomcat 启动参数中指定非阻塞熵源(对当前实例立即生效)
      • 编辑或新建 $CATALINA_HOME/bin/setenv.sh,加入:
        • CATALINA_OPTS=“$CATALINA_OPTS -Djava.security.egd=file:/dev/./urandom”
      • 重启 Tomcat 并观察日志是否恢复正常。
    2. 修改 JDK 安全配置(对所有 Java 应用生效)
      • 编辑 $JAVA_HOME/jre/lib/security/java.security,将
        • securerandom.source=file:/dev/random 改为
        • securerandom.source=file:/dev/./urandom
      • 注意路径中的“./”是历史 JDK 的兼容写法,能确保使用非阻塞源。
    3. 提升系统熵池(从根本上缓解阻塞)
      • 安装并启动熵服务:sudo apt-get install rng-tools;sudo service rng-tools start
      • 适用于虚拟机、云主机等熵源较少的环境。
  • 以上做法与现象在 Tomcat 7/8/9JDK 7/8 的 Ubuntu 环境中均常见且有效。

三、应用与容器的进一步优化

  • 精简 Web 应用与依赖
    • 删除 webapps 下不需要的示例应用(如 docs、examples、ROOT 等)。
    • 减少不必要的 JAR,避免启动时类加载与扫描耗时。
  • 减少注解与 TLD 扫描开销
    • 在应用的 WEB-INF/web.xml 中设置:(仅在确认不需要扫描注解/TLD 时使用)。
  • 调整线程与连接器
    • server.xml 的 中合理设置:
      • maxThreads(最大线程数)、minSpareThreads(最小空闲线程)、acceptCount(队列长度)
      • 示例:
  • JVM 内存与 GC
    • catalina.sh/setenv.sh 中设置合适的堆与 GC(示例):
      • JAVA_OPTS=“$JAVA_OPTS -Xms512m -Xmx1024m -XX:+UseG1GC -Djava.awt.headless=true -Dfile.encoding=UTF-8”
  • 启用压缩(提升运行期性能,对“启动”影响有限)
    • < Connector … compression=“on” compressionMinSize=“2048” compressableMimeType=“text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json” />
  • 可选:使用 SSD 存储、清理系统与服务日志(如 journalctl --vacuum-size 100M),减少 I/O 等待。

四、验证与回退

  • 重启并观察:tail -f catalina.out,确认不再长时间停留在 SecureRandom 初始化;对比启动总耗时是否显著下降。
  • 若修改 java.security 后仍有问题,优先回退该文件,改用 -Djava.security.egd=file:/dev/./urandom 的实例级配置进行验证,便于快速定位影响范围。
  • 若启动依旧缓慢,继续检查应用初始化逻辑(如 ServletContextListener、数据源连接池初始化、JPA/Hibernate 启动建表/校验)是否存在耗时操作。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: 如何解决Ubuntu Tomcat启动慢
本文地址: https://pptw.com/jishu/770486.html
如何配置Ubuntu Tomcat安全 Linux cpustat如何查看CPU虚拟化性能

游客 回复需填写必要信息