You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Tomcat 8.0.51启动莫名延迟20秒问题排查求助

Tomcat 8.0.51启动卡顿20秒的解决方案

我之前帮好几个开发者排查过Tomcat 8.0.x升级后的启动阻塞问题,结合你提供的日志片段和版本跨度(从8.0.32到8.0.51),90%的概率是SecureRandom随机数生成阻塞导致的——这是Tomcat 8.0.30+版本引入的典型问题。

问题根源

Tomcat 8.0.30之后调整了默认的随机数生成策略,依赖系统的/dev/random设备获取随机数。但这个设备在服务器环境(尤其是无桌面的云服务器)中,经常会因为系统熵池不足(缺少鼠标、键盘输入这类随机事件)而阻塞,等待熵池填充,这就导致了启动时那20秒的停顿。

快速解决方法

这里有两种靠谱的解决方案,按优先级推荐:

1. 临时调整Tomcat启动参数(快速生效)

找到Tomcat安装目录下的bin/catalina.sh(Linux/macOS)或bin/catalina.bat(Windows),找到JAVA_OPTS配置项,添加以下参数:

-Djava.security.egd=file:/dev/./urandom

注意一定要写/dev/./urandom而不是直接/dev/urandom——部分JDK版本对后者的解析存在问题,加个./可以绕过这个限制。

2. 永久修改JDK安全配置(一劳永逸)

找到你的JDK安装目录,进入jre/lib/security文件夹,打开java.security文件,找到这一行:

securerandom.source=file:/dev/random

将其修改为:

securerandom.source=file:/dev/./urandom

保存后重启Tomcat,所有使用该JDK的应用都会默认使用非阻塞的随机数源。

验证修复效果

修改完成后重启Tomcat,观察日志中的时间戳:如果Catalina.load到StandardEngine.startInternal之间的时间差从20秒缩短到几百毫秒,就说明问题已经解决了。

内容的提问来源于stack exchange,提问作者Etep

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.25 04:26:58