首页主机资讯CentOS Tomcat如何优化启动速度

CentOS Tomcat如何优化启动速度

时间2025-11-24 16:59:04发布访客分类主机资讯浏览302
导读: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 编译时间。
  • 连接器与线程池调优(server.xml)
    • 使用 NIOAPR(需安装 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 能力,线程与压缩参数提升运行期表现,间接缩短滚动升级/重启的整体窗口。
  • 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
      说明:提升系统资源上限与网络栈表现,减少高并发下的额外等待。

三 推荐配置示例

  • 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 精细控制(可选)
    <
        Context>
        
      <
        JarScanFilter jarsToSkip="*.jar"/>
        
    <
        /Context>
        
    
    说明:以上为常用、低风险的组合,优先从熵源与 JAR 扫描入手,通常即可获得显著改善。

四 验证与回退

  • 验证步骤
    • 重启 Tomcat,观察 catalina.out
      • SecureRandom 初始化耗时是否从“秒级/分钟级”下降到“毫秒级”。
      • “Skipping unneeded JARs …” 提示是否消失或显著减少。
    • 检查熵值:cat /proc/sys/kernel/random/entropy_avail,确认已提升到合理水平(如 > 1000)。
    • 如启用 APR,确认 native 库加载成功(日志无相关报错)。
  • 回退与风险控制
    • 修改 java.security 前先备份;若遇到安全合规要求,优先使用 -Djava.security.egd 方式。
    • 调整线程与内存参数需结合压测逐步放大,避免一次性设置过大导致 OOM 或调度抖动。
    • 生产变更建议先在测试环境验证,并保留回滚方案。

声明:本文内容由网友自发贡献,本站不承担相应法律责任。对本内容有异议或投诉,请联系2913721942#qq.com核实处理,我们将尽快回复您,谢谢合作!


若转载请注明出处: CentOS Tomcat如何优化启动速度
本文地址: https://pptw.com/jishu/754610.html
CentOS Tomcat如何实现自动重启 CentOS Tomcat如何配置虚拟主机

游客 回复需填写必要信息