- 启动阶段
- 延迟初始化:spring.main.lazy-initialization=true
- 编译期索引:引入 spring-context-indexer,减少类路径扫描
- 精简自动装配:@SpringBootApplication(exclude = {...}) 去掉无用模块
- JVM 层面
- 内存:-Xms4g -Xmx4g -XX:NewRatio=1
- GC:-XX:+UseG1GC -XX:MaxGCPauseMillis=200 -XX:InitiatingHeapOccupancyPercent=35
- 元空间:-XX:MaxMetaspaceSize=256m
- Web 容器
- Tomcat 线程:max=200、min-spare=20、accept-count=100
- KeepAlive:connection-timeout=5s、max-connections=10000
- 响应压缩:server.compression.enabled=true,最小 1 KB 开始压缩
- 数据库
- 连接池:HikariCP,maximum-pool-size=CPU 核数×2+SSD 数,min-idle=5
- SQL:避免 N+1,使用 @EntityGraph 或 DTO 投影;热点数据加二级缓存
- PgBouncer:前置层复用连接,数据库实际连接从 1000+ 降到 200
- 缓存体系
- 本地:Caffeine,maximumSize=10000,expireAfterWrite=5min
- 分布式:Redis Cluster(热点 30s TTL)+ Sentinel(普通 30min TTL)
- 注解:@Cacheable、@CacheEvict,配合 @Async 异步刷新
- 异步化
- @Async 自定义线程池:core=8、max=32、queue=1000
- CompletableFuture 并行编排;第三方调用加超时与降级
- 监控与持续优化
- Actuator 暴露 health、metrics、prometheus 端点
- APM:SkyWalking/Arthas 定位慢请求;定期压测验证
- 代码与架构
- 事务:只读操作加 @Transactional(readOnly = true),范围最小化
- 对象映射:DTO 投影减少序列化字段;Jackson @JsonView 控制返回
- 参数校验:@Max、@Min 拦截恶意请求
按上述设计落地,典型接口可实现 8 s → 800 ms 的响应跃迁,TPS 提升 10 倍,GC 停顿下降 90%。