**1. 线程池优化(Web容器层)**
Tomcat配置示例:
server: tomcat: max-threads: 200 # 默认200,建议公式:CPU核心数*(1+WT/ST) min-spare-threads: 20 # 初始线程数 accept-count: 100 # 等待队列长度 connection-timeout: 5s # 连接超时
原理:
max-threads
:处理请求的线程数上限(超过后进入等待队列)accept-count
:队列满时的拒绝策略阈值(Linux下Epoll模型效率更高)
2. 异步非阻塞处理
Servlet 3.1+异步支持:
@WebServlet(asyncSupported = true) public class AsyncServlet extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletResponse resp) { AsyncContext ctx = req.startAsync(); CompletableFuture.runAsync(() -> { // 异步处理逻辑 ctx.complete(); }); } }
**响应式编程(WebFlux)**:
@GetMapping("/flux") public Flux<Data> getStream() { return reactiveRepository.findAll() .subscribeOn(Schedulers.boundedElastic()); }
**3. 连接池优化(数据库/HTTP)**
HikariCP配置:
spring: datasource: hikari: maximum-pool-size: 20 # 公式:(core_count * 2) + effective_spindle_count connection-timeout: 30000 idle-timeout: 600000 max-lifetime: 1800000
HTTP客户端优化:
@Bean public WebClient webClient() { return WebClient.builder() .clientConnector(new ReactorClientHttpConnector( HttpClient.create() .option(ChannelOption.CONNECT_TIMEOUT_MILLIS, 5000) .doOnConnected(conn -> conn.addHandlerLast(new ReadTimeoutHandler(5)) ) )) .build(); }
4. JVM参数调优
关键参数:
java -jar -Xms2g -Xmx2g -XX:+UseG1GC \ -XX:MaxGCPauseMillis=200 \ -XX:ParallelGCThreads=4 \ -XX:ConcGCThreads=2 \ -XX:+HeapDumpOnOutOfMemoryError \ app.jar
GC选择策略:
- 低延迟:ZGC(JDK15+)或 Shenandoah
- 高吞吐:G1GC(默认)
- 小内存:ParallelGC
5. 缓存优化
多级缓存架构:
@Configuration @EnableCaching public class CacheConfig { @Bean public CacheManager cacheManager() { CaffeineCacheManager manager = new CaffeineCacheManager(); manager.setCaffeine(Caffeine.newBuilder() .maximumSize(1000) .expireAfterWrite(10, TimeUnit.MINUTES)); return manager; } }
分布式缓存:
spring: cache: type: redis redis: lettuce: pool: max-active: 16 max-idle: 8
6. 性能监控与诊断
Arthas实时诊断:
# 监控方法调用耗时 watch com.example.Service * '{params,returnObj}' -x 3 -n 5 # 查看线程阻塞 thread -b
Prometheus监控指标:
@Bean MeterRegistryCustomizer<MeterRegistry> metrics() { return registry -> registry.config().commonTags("app", "high-perf"); }
7. 其他关键优化点
-
静态资源处理:
- 启用HTTP/2:
server.http2.enabled=true
- 资源压缩:
server.compression.enabled=true
- 启用HTTP/2:
-
序列化优化:
@Bean HttpMessageConverters customConverters() { return new HttpMessageConverters(new MappingJackson2HttpMessageConverter( new ObjectMapper().registerModule(new JavaTimeModule()) )); }
-
分布式锁优化:
@Bean public RedissonClient redisson() { Config config = new Config(); config.useClusterServers() .setScanInterval(2000) .addNodeAddress("redis://127.0.0.1:6379"); return Redisson.create(config); }
性能对比基准
优化项 | QPS提升 | 延迟降低 | 适用场景 |
---|---|---|---|
线程池调优 | 30-50% | 20% | IO密集型 |
WebFlux响应式 | 3-5x | 60% | 高并发微服务 |
连接池优化 | 40% | 30% | 数据库/HTTP依赖 |
缓存命中率提升 | 10x | 90% | 读多写少 |
JVM GC调优 | 15% | 50% | 内存敏感型应用 |
实战检查清单
-
使用
wrk
压力测试:wrk -t12 -c400 -d30s http://localhost:8080/api
-
分析火焰图:
async-profiler -d 60 -f flamegraph.html pid
-
监控关键指标:
- CPU使用率(需低于70%)
- GC停顿时间(G1GC建议<200ms)
- 线程池活跃度(
tomcat.threads.busy
)
需要针对具体场景的深度优化方案(如Kafka消费者并发优化、MyBatis批处理等)可进一步探讨。