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”的系统级方案;