将 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.sh
或catalina.sh
):iniJAVA_OPTS="-Xms1024m -Xmx2048m -XX:MetaspaceSize=256m -XX:MaxMetaspaceSize=512m -XX:+UseG1GC"
- 说明:根据应用内存需求调整堆大小,G1 垃圾回收器适合低延迟场景。
2. GC 日志监控
-
开启 GC 日志:
iniJAVA_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
配置:yamlspring: 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:
yamlmanagement: 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); }
八、部署注意事项
-
JAR 包优化:
- 使用
maven-shade-plugin
打包时排除冗余依赖。
- 使用
-
Tomcat 部署配置:
- 禁用不必要的 Connector(如 AJP)。
-
压力测试:
- 使用 JMeter 或 Gatling 模拟高并发,验证优化效果。
总结
通过 Tomcat 线程池调优 、JVM 内存管理 、数据库/Redis 连接池优化 、静态资源缓存 和 代码级异步处理,可显著提升 Spring Boot 应用在 Tomcat 下的性能。建议结合监控工具持续观察系统瓶颈,动态调整参数。