Spring Boot 应用打包部署到 Tomcat ,如何极致调优看这里

将 Spring Boot 应用打包部署到 Tomcat 后,性能优化需要从 ​​Tomcat 配置、JVM 调优、资源管理、代码优化​​ 等多个维度进行综合调整。以下是具体操作建议:


一、Tomcat 配置优化

1. ​​线程池调整​

  • ​核心参数​​:

    ini 复制代码
    <!-- conf/server.xml -->
    <Connector port="8080" protocol="HTTP/1.1"
               maxThreads="500"        # 最大线程数(根据 CPU 核心数调整)
               minSpareThreads="50"    # 最小空闲线程数
               acceptCount="1000"      # 请求队列长度
               connectionTimeout="20000"  # 连接超时时间(毫秒)/>
    • ​说明​maxThreads 需结合服务器 CPU 和内存资源设置,避免过高导致上下文切换开销。

2. ​​连接器协议优化​

  • ​启用 NIO 或 APR​​:

    ini 复制代码
    <Connector protocol="org.apache.coyote.http11.Http11NioProtocol" ... />
    • ​优势​:NIO 提升非阻塞 I/O 性能,APR 利用原生库优化网络传输。

3. ​​压缩与缓存​

  • ​启用 GZIP 压缩​​:

    ini 复制代码
    <Connector compression="on" compressableMimeType="text/html,text/xml,application/json" ... />
  • ​静态资源缓存​​:

    xml 复制代码
    <Context>
      <Resources cachingAllowed="true" cacheMaxSize="102400" />
    </Context>

二、JVM 调优

1. ​​堆内存配置​

  • ​启动参数​ ​(setenv.shcatalina.sh):

    ini 复制代码
    JAVA_OPTS="-Xms1024m -Xmx2048m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -XX:+UseG1GC"
    • ​说明​:根据应用内存需求调整堆大小,G1 垃圾回收器适合低延迟场景。

2. ​​GC 日志监控​

  • ​开启 GC 日志​​:

    ini 复制代码
    JAVA_OPTS="$JAVA_OPTS -Xloggc:/var/log/tomcat/gc.log -XX:+PrintGCDetails -XX:+PrintGCDateStamps"

三、数据库连接池优化(以 Druid 为例)

1. ​​连接池配置​

  • context.xml 配置​​:

    ini 复制代码
    <Resource name="jdbc/mydb" 
              auth="Container"
              type="com.alibaba.druid.pool.DruidDataSource"
              maxActive="200"       # 最大活动连接数
              initialSize="10"      # 初始连接数
              minIdle="10"          # 最小空闲连接数
              maxWait="60000"       # 获取连接超时时间
              timeBetweenEvictionRunsMillis="60000"  # 检测空闲连接间隔
              validationQuery="SELECT 1" />
    • ​说明​:避免连接泄漏,需在代码中显式关闭连接。

四、Redis 连接池优化

1. ​​Lettuce 连接池配置​

  • application.yml 配置​​:

    yaml 复制代码
    spring:
      redis:
        lettuce:
          pool:
            max-active: 100      # 最大连接数
            min-idle: 10         # 最小空闲连接数
            max-wait: 1000ms     # 获取连接超时时间
    • ​说明​:结合 Redis 性能测试调整参数,避免连接数过高导致 Redis 响应变慢。

五、静态资源优化

1. ​​HTTP 缓存头配置​

  • web.xml 配置​​:

    xml 复制代码
    <filter>
      <filter-name>ExpiresFilter</filter-name>
      <filter-class>org.apache.catalina.filters.ExpiresFilter</filter-class>
      <init-param>
        <param-name>ExpiresByType image</param-name>
        <param-value>access plus 1 month</param-value>
      </init-param>
    </filter>
    • ​说明​:对图片、CSS/JS 等静态资源设置长期缓存,减少重复请求。

六、安全与监控

1. ​​安全加固​

  • ​HTTPS 配置​​:

    ini 复制代码
    <Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
               keystoreFile="/path/to/keystore.jks"
               keystorePass="password" />
  • ​防恶意请求​​:

    ini 复制代码
    <Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="192.168..+" />

2. ​​性能监控​

  • ​Spring Boot Actuator​​:

    yaml 复制代码
    management:
      endpoints:
        web:
          exposure:
            include: health,metrics,info
  • ​Prometheus + Grafana​​:集成监控指标,实时分析 CPU、内存、线程池状态。


七、代码级优化

1. ​​异步处理​

  • ​使用 @Async 注解​​:

    typescript 复制代码
    @Async
    public void processLargeData() {
      // 耗时操作异步执行
    }

2. ​​缓存策略​

  • ​本地缓存 + Redis 缓存​​:

    kotlin 复制代码
    @Cacheable(value = "userCache", key = "#id")
    public User getUserById(Long id) {
      return userRepository.findById(id).orElse(null);
    }

八、部署注意事项

  1. ​JAR 包优化​​:

    • 使用 maven-shade-plugin 打包时排除冗余依赖。
  2. ​Tomcat 部署配置​​:

    • 禁用不必要的 Connector(如 AJP)。
  3. ​压力测试​​:

    • 使用 JMeter 或 Gatling 模拟高并发,验证优化效果。

总结

通过 ​​Tomcat 线程池调优​ ​、​​JVM 内存管理​ ​、​​数据库/Redis 连接池优化​ ​、​​静态资源缓存​ ​ 和 ​​代码级异步处理​​,可显著提升 Spring Boot 应用在 Tomcat 下的性能。建议结合监控工具持续观察系统瓶颈,动态调整参数。

相关推荐
爱掉发的小李3 分钟前
Linux 环境下 Docker 安装与简单使用指南
java·linux·运维·c++·python·docker·php
青灯文案126 分钟前
Spring Boot 的事务注解 @Transactional 失效的几种情况
java·spring boot·后端
困困_0427 分钟前
rabbitMQ
java·rabbitmq·java-rabbitmq
爱编程的鱼41 分钟前
计算机(电脑)是什么?零基础硬件软件详解
java·开发语言·算法·c#·电脑·集合
求知若渴,虚心若愚。1 小时前
ansible.cfg 配置文件生成
java·服务器·ansible
雪域迷影1 小时前
使用AssemblyAI将音频数据转换成文本
java·音视频·restapi·gson·assemblyai
CF14年老兵1 小时前
2025 年每个开发人员都应该知道的 6 个 VS Code AI 工具
前端·后端·trae
think1231 小时前
带你走进Spring Cloud的世界
spring boot·后端·spring cloud
没逻辑1 小时前
Goroutine 死锁定位与调试全流程
后端
IH_LZH2 小时前
kotlin小记(1)
android·java·前端·kotlin