Debian 上 Tomcat 启动慢,通常不是 Tomcat 本身的问题,而是 运行环境 / 配置 / 系统特性 导致的。下面按「最常见 → 较少见」给你系统梳理一下原因和解决办法。
Tomcat 启动时会使用 SecureRandom 生成随机数(session id、SSL 等)。
现象
熵池不足原因 Debian 默认使用:
/dev/random(阻塞)
而不是 /dev/urandom
解决办法(任选其一)
✅ 方法 1(推荐):修改 JAVA_OPTS
export JAVA_OPTS="-Djava.security.egd=file:/dev/./urandom"
✅ 方法 2:安装 haveged(老机器有效)
apt install haveged
systemctl enable haveged
✅ 方法 3:使用 rng-tools
apt install rng-tools
现象
top 看到大量 swap解决办法
free -h
JAVA_OPTS="-Xms512m -Xmx1024m"
Debian 可能装了多个 Java:
update-alternatives --list java
建议 明确指定:
export JAVA_HOME=/usr/lib/jvm/java-11-openjdk-amd64
Tomcat 会扫描:
解决办法
在 conf/context.xml:
<Context>
<JarScanner>
<JarScanFilter defaultTldScan="false"/>
</JarScanner>
</Context>
或在 web.xml:
<web-app metadata-complete="true">
验证
mv app.war /tmp/
systemctl restart tomcat
如果快了,就是应用问题。
Tomcat 依赖:
可检查:
systemctl status tomcat9
journalctl -u tomcat9
Tomcat 会尝试解析主机名。
解决办法
在 /etc/hosts:
127.0.0.1 your-hostname
# 1. 看启动卡在哪
journalctl -u tomcat -f
# 2. 熵池问题
cat /proc/sys/kernel/random/entropy_avail
# 3. JVM 参数
ps aux | grep java
# 4. 应用影响
移走 war 测试
Debian 上 Tomcat 启动慢,80% 是 SecureRandom 熵池问题,其次是内存和应用初始化。
如果你愿意,可以贴一下:
journalctl -u tomcat 启动日志我可以帮你精准定位是哪一条。