Tomcat 启动加速实用清单
一 定位瓶颈
cat /proc/sys/kernel/random/entropy_avail,数值偏低(如低于 100)时更易阻塞。二 快速见效的优化
$TOMCAT_HOME/bin/catalina.sh(或 setenv.sh)加入JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom"(注意路径中的 “./” 在某些 JDK 7 版本中用于规避 Bug)。$JAVA_HOME/jre/lib/security/java.security,将securerandom.source=file:/dev/random 改为 securerandom.source=file:/dev/./urandom。yum install rng-tools && systemctl enable --now rngd,显著提升 /dev/random 可用性。webapps 下不需要的应用(如 docs、examples、host-manager、ROOT)。conf/context.xml 中限制 TLD 扫描:<JarScanner><JarScanFilter defaultTldScan="false"/></JarScanner><Context containerSciFilter="org.apache.tomcat.websocket.server.WsSci | org.apache.tomcat.websocket.server.JasperInitializer"/>WEB-INF/web.xml 设置 <web-app metadata-complete="true">,跳过注解/Web 片段扫描。conf/server.xml 的 <Host> 上设置:<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="false" deployOnStartup="false" startStopThreads="0">catalina.sh/setenv.sh 设置:JAVA_OPTS="$JAVA_OPTS -server -Xms1024m -Xmx1024m"(数值按业务与容器规格调整,建议 Xms 与 Xmx 接近以减少运行时扩缩容抖动)。三 配置示例
#!/bin/sh
export JAVA_OPTS="$JAVA_OPTS -Djava.security.egd=file:/dev/./urandom"
<Host name="localhost" appBase="webapps" unpackWARs="true"
autoDeploy="false" deployOnStartup="false" startStopThreads="0"/>
<Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol"
connectionTimeout="20000" redirectPort="8443"
maxThreads="200" minSpareThreads="50" acceptCount="100"
compression="on" compressionMinSize="2048"
compressableMimeType="text/html,text/xml,text/javascript,text/css,text/plain"/>
<Context>
<JarScanner>
<JarScanFilter defaultTldScan="false"/>
</JarScanner>
<Parameter name="containerSciFilter"
value="org.apache.tomcat.websocket.server.WsSci | org.apache.tomcat.websocket.server.JasperInitializer"/>
</Context>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
version="4.0" metadata-complete="true">
<!-- your config -->
</web-app>
server:
tomcat:
threads:
min-spare: 20
max: 200
connection-timeout: 5000ms
以上示例分别覆盖了熵源、并行启动、连接器与压缩、扫描关闭与内嵌容器的常见做法,可按需组合启用。
四 进阶与注意事项
Http11NioProtocol)以获得更好的 I/O 性能;必要时再考虑 APR/Native。/etc/security/limits.conf)、优化 网络/文件句柄 等内核参数,避免资源瓶颈放大启动耗时。securerandom.source 改为 /dev/urandom 或以 -Djava.security.egd 指定非阻塞熵源,会在极少数对密码学强随机性极端敏感的场景下降低随机强度;一般业务应用可接受,涉及高安全场景请结合 rngd 增强熵池或评估影响。免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。