如何解决Ubuntu Tomcat启动慢
导读: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 作为熵源;当系统熵不足时,读取会被阻塞,导致启动显著变慢。
- 解决方案(任选其一,推荐前两种):
- 在 Tomcat 启动参数中指定非阻塞熵源(对当前实例立即生效)
- 编辑或新建 $CATALINA_HOME/bin/setenv.sh,加入:
- CATALINA_OPTS=“$CATALINA_OPTS -Djava.security.egd=file:/dev/./urandom”
- 重启 Tomcat 并观察日志是否恢复正常。
- 编辑或新建 $CATALINA_HOME/bin/setenv.sh,加入:
- 修改 JDK 安全配置(对所有 Java 应用生效)
- 编辑 $JAVA_HOME/jre/lib/security/java.security,将
- securerandom.source=file:/dev/random 改为
- securerandom.source=file:/dev/./urandom
- 注意路径中的“./”是历史 JDK 的兼容写法,能确保使用非阻塞源。
- 编辑 $JAVA_HOME/jre/lib/security/java.security,将
- 提升系统熵池(从根本上缓解阻塞)
- 安装并启动熵服务:sudo apt-get install rng-tools;sudo service rng-tools start
- 适用于虚拟机、云主机等熵源较少的环境。
- 在 Tomcat 启动参数中指定非阻塞熵源(对当前实例立即生效)
- 以上做法与现象在 Tomcat 7/8/9、JDK 7/8 的 Ubuntu 环境中均常见且有效。
三、应用与容器的进一步优化
- 精简 Web 应用与依赖
- 删除 webapps 下不需要的示例应用(如 docs、examples、ROOT 等)。
- 减少不必要的 JAR,避免启动时类加载与扫描耗时。
- 减少注解与 TLD 扫描开销
- 在应用的 WEB-INF/web.xml 中设置:(仅在确认不需要扫描注解/TLD 时使用)。
- 调整线程与连接器
- 在 server.xml 的 中合理设置:
- maxThreads(最大线程数)、minSpareThreads(最小空闲线程)、acceptCount(队列长度)
- 示例:
- 在 server.xml 的 中合理设置:
- JVM 内存与 GC
- 在 catalina.sh/setenv.sh 中设置合适的堆与 GC(示例):
- JAVA_OPTS=“$JAVA_OPTS -Xms512m -Xmx1024m -XX:+UseG1GC -Djava.awt.headless=true -Dfile.encoding=UTF-8”
- 在 catalina.sh/setenv.sh 中设置合适的堆与 GC(示例):
- 启用压缩(提升运行期性能,对“启动”影响有限)
- < 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
