CentOS Tomcat如何优化启动速度
导读:CentOS 上 Tomcat 启动加速实用指南 一 定位瓶颈 检查是否卡在 SecureRandom:查看 catalina.out 中是否存在类似日志: org.apache.catalina.util.SessionIdGenera...
CentOS 上 Tomcat 启动加速实用指南
一 定位瓶颈
- 检查是否卡在 SecureRandom:查看 catalina.out 中是否存在类似日志:
org.apache.catalina.util.SessionIdGeneratorBase.createSecureRandom Creation of SecureRandom instance … took [55,507] ms。
同时检查系统熵值:cat /proc/sys/kernel/random/entropy_avail,数值偏低(如低于 100)常见于虚拟机环境,会导致阻塞。 - 检查是否卡在 JAR 扫描:日志出现 “Skipping unneeded JARs during scanning can improve startup time and JSP compilation time.” 表示应用或全局 JAR 扫描耗时,可通过缩小扫描范围优化。
二 高性价比优化措施
- 熵源与 JVM 启动参数
- 安装并启用熵服务(推荐在虚拟机/云主机上使用):
yum install -y rng-tools & & systemctl enable --now rngd - 在 $TOMCAT_HOME/bin/catalina.sh 的 JAVA_OPTS 中增加:
-Djava.security.egd=file:/dev/urandom - 如仍需在 java.security 中调整(部分 JDK/场景有效):
securerandom.source=file:/dev/urandom
说明:/dev/urandom 为非阻塞熵源,能显著缩短启动时的随机数初始化耗时。
- 安装并启用熵服务(推荐在虚拟机/云主机上使用):
- 减少 JAR 扫描范围
- 全局层面:在 $CATALINA_HOME/conf/catalina.properties 设置:
tomcat.util.scan.StandardJarScanFilter.jarsToSkip=*.jar
如需保留部分组件(如 JSP 编译),可改为更精细的白名单方式。 - 应用层面:在应用的 META-INF/context.xml 使用 JarScanFilter:
说明:跳过不含 TLD/META-INF 的 JAR,可明显降低扫描与 JSP 编译时间。
- 全局层面:在 $CATALINA_HOME/conf/catalina.properties 设置:
- 连接器与线程池调优(server.xml)
- 使用 NIO 或 APR(需安装 native 库)以提升 I/O:
protocol=“org.apache.coyote.http11.Http11NioProtocol” - 合理设置并发与超时:
maxThreads(如 200)、minSpareThreads(如 50)、acceptCount(如 100)、connectionTimeout(如 20000 ms) - 启用压缩以减少后续请求传输耗时(对“启动”本身影响小,但对整体性能有益):
compression=“on”、compressionMinSize=“2048”、compressableMimeType=“text/html,text/xml,text/plain,application/json” - 关闭 DNS 反查:enableLookups=“false”
说明:NIO/APR 提升 I/O 能力,线程与压缩参数提升运行期表现,间接缩短滚动升级/重启的整体窗口。
- 使用 NIO 或 APR(需安装 native 库)以提升 I/O:
- JVM 内存与 GC(按需设置)
- 示例:
-Xms512m -Xmx1024m
-XX:+UseG1GC 或 -XX:+UseParallelGC
说明:避免频繁 GC 与过小堆导致的抖动,有助于稳定启动与运行。
- 示例:
- 系统与内核参数(可选)
- 文件描述符:/etc/security/limits.conf 增加
- soft nofile 65536
- hard nofile 65536
- 网络与内核:/etc/sysctl.conf 示例
net.core.somaxconn 65535
net.ipv4.tcp_tw_reuse 1
fs.file-max 65536 - 透明大页(部分环境有效):
echo never > /sys/kernel/mm/transparent_hugepage/enabled
echo never > /sys/kernel/mm/transparent_hugepage/defrag
说明:提升系统资源上限与网络栈表现,减少高并发下的额外等待。
- 文件描述符:/etc/security/limits.conf 增加
三 推荐配置示例
- server.xml 连接器片段(示例值,按业务压测微调)
< Connector port="8080" protocol="org.apache.coyote.http11.Http11NioProtocol" maxThreads="200" minSpareThreads="50" acceptCount="100" connectionTimeout="20000" enableLookups="false" compression="on" compressionMinSize="2048" compressableMimeType="text/html,text/xml,text/plain,application/json" /> - catalina.sh 启动参数片段(放在 JAVA_OPTS 中)
-Djava.security.egd=file:/dev/urandom -Xms512m -Xmx1024m -XX:+UseG1GC - catalina.properties 全局跳过示例
tomcat.util.scan.StandardJarScanFilter.jarsToSkip=\*.jar - 应用内 context.xml 精细控制(可选)
说明:以上为常用、低风险的组合,优先从熵源与 JAR 扫描入手,通常即可获得显著改善。< Context> < JarScanFilter jarsToSkip="*.jar"/> < /Context>
四 验证与回退
- 验证步骤
- 重启 Tomcat,观察 catalina.out:
- SecureRandom 初始化耗时是否从“秒级/分钟级”下降到“毫秒级”。
- “Skipping unneeded JARs …” 提示是否消失或显著减少。
- 检查熵值:cat /proc/sys/kernel/random/entropy_avail,确认已提升到合理水平(如 > 1000)。
- 如启用 APR,确认 native 库加载成功(日志无相关报错)。
- 重启 Tomcat,观察 catalina.out:
- 回退与风险控制
- 修改 java.security 前先备份;若遇到安全合规要求,优先使用 -Djava.security.egd 方式。
- 调整线程与内存参数需结合压测逐步放大,避免一次性设置过大导致 OOM 或调度抖动。
- 生产变更建议先在测试环境验证,并保留回滚方案。
声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!
若转载请注明出处: CentOS Tomcat如何优化启动速度
本文地址: https://pptw.com/jishu/754610.html
