Spring Boot 性能调优:从 JVM 到 Tomcat 全链路优化
James Park | 2026-08-26T23:03:00 | Java, Spring Boot
系统梳理 Spring Boot 应用在 JVM 参数、Tomcat 线程池、数据库连接池、缓存等各层面的性能调优方案。
# Spring Boot 性能调优:从 JVM 到 Tomcat 全链路优化 ## 一、JVM 参数优化 ```bash java -jar app.jar \ -Xms512m -Xmx512m \ # 堆内存固定大小,避免动态调整 -XX:+UseG1GC \ # G1 垃圾收集器 -XX:MaxGCPauseMillis=200 \ # 目标最大停顿 200ms -XX:+UseStringDeduplication \ # 字符串去重(G1 专属) -XX:MetaspaceSize=256m \ # 元空间初始大小 -XX:MaxMetaspaceSize=256m # 元空间最大大小(避免动态扩展) ``` ## 二、Tomcat 线程池 ```yaml server: tomcat: threads: max: 200 # 最大线程数(默认 200) min-spare: 20 # 最小空闲线程 max-connections: 8192 # 最大连接数 accept-count: 100 # 等待队列长度 connection-timeout: 5000 # 连接超时(毫秒) ``` 调优思路:通过压测找到 `threads.max` 的拐点(QPS 不再随线程数增长的点)。 ## 三、HikariCP 连接池 ```yaml spring: datasource: hikari: maximum-pool-size: 20 # 最大连接数 minimum-idle: 5 # 最小空闲连接 idle-timeout: 300000 # 空闲超时(5 分钟) connection-timeout: 20000 # 获取连接超时(20 秒) max-lifetime: 1800000 # 连接最大存活时间(30 分钟) leak-detection-threshold: 60000 # 连接泄漏检测(60 秒) ``` 经验公式:`pool_size = CPU 核心数 * 2 + 磁盘数` ## 四、缓存层优化 ```java @Configuration @EnableCaching public class CacheConfig { @Bean public CaffeineCacheManager cacheManager() { CaffeineCacheManager manager = new CaffeineCacheManager(); manager.setCaffeine(Caffeine.newBuilder() .maximumSize(10000) .expireAfterWrite(Duration.ofMinutes(10)) .recordStats()); // 开启统计 return manager; } } @Service public class ProductService { @Cacheable(value = "products", key = "#id") public Product getById(Long id) { return productRepository.findById(id).orElseThrow(); } @CacheEvict(value = "products", key = "#product.id") public void update(Product product) { productRepository.save(product); } } ``` ## 五、接口响应压缩 ```yaml server: compression: enabled: true mime-types: application/json,text/html,text/xml,text/plain min-response-size: 1024 # 超过 1KB 才压缩 ``` JSON 响应通常可压缩 60-80%,显著减少网络传输时间。 ## 六、监控指标 压测时关注以下指标: - QPS 和 P99 延迟 - GC 频率和停顿时间 - 线程池活跃数和队列长度 - 数据库连接池使用率 - CPU 和内存使用率