CentOS 上 Tomcat 启动慢的优化步骤
一 先定位瓶颈
cat /proc/sys/kernel/random/entropy_avail,数值很低(如个位数或几十)时,/dev/random 会阻塞,导致启动卡住。以上现象与低熵高度相关,应优先处理熵源问题。二 快速修复 提升熵源
yum install -y rng-toolssystemctl start rngd && systemctl enable rngdgrep rdrand /proc/cpuinfo$JAVA_HOME/jre/lib/security/java.security:securerandom.source=file:/dev/random 改为 securerandom.source=file:/dev/urandom$CATALINA_HOME/bin/setenv.sh 中添加(推荐做法,避免改动全局 JDK 配置):export JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/urandom"三 JVM 启动参数优化
$CATALINA_HOME/bin/setenv.sh 中统一配置(文件不存在则新建,赋予可执行权限):
export JAVA_OPTS="\
-server \
-Xms2g -Xmx2g \
-XX:+UseG1GC \
-XX:MaxGCPauseMillis=500 \
-XX:+HeapDumpOnOutOfMemoryError \
-XX:HeapDumpPath=/data/log/ \
-Djava.security.egd=file:/dev/urandom"
四 Tomcat 配置与服务优化
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="200" minSpareThreads="50" acceptCount="100"
connectionTimeout="20000" enableLookups="false"
compression="on" compressionMinSize="2048"
compressibleMimeType="text/html,text/xml,text/plain,application/json" />
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="false" deployOnStartup="false" />
* soft nofile 65536、* hard nofile 65536;fs.file-max=65536、net.core.somaxconn=65535、net.ipv4.tcp_tw_reuse=1;echo never > /sys/kernel/mm/transparent_hugepage/enabledecho never > /sys/kernel/mm/transparent_hugepage/defrag五 验证与回退
cat /proc/sys/kernel/random/entropy_avail 观察熵值是否充足;systemd-analyze blame(若以 systemd 管理)或脚本化多次启动取平均耗时,量化优化收益。java.security,建议备份原文件;securerandom.source 改为 /dev/urandom 在极少数高安全场景可能略降随机强度,优先采用“启用 rngd”的系统级方案;