🚀 全链路性能优化指南
性能优化是一个系统工程,本章节从数据库、应用代码、JVM 到架构层面提供全方位的优化策略。
💾 数据库与连接池优化
HikariCP 连接池配置
Spring Boot 默认使用 HikariCP,关键参数如下:
yaml
spring:
datasource:
hikari:
maximum-pool-size: 10 # 根据 CPU 核心数与 I/O 耗时调整:Core * 2 + Effective Spindle
minimum-idle: 5
connection-timeout: 30000 # 30s
idle-timeout: 600000 # 10min
max-lifetime: 1800000 # 30minSQL 调优 Checklist
- 索引失效:避免在索引列上进行计算或函数操作;
LIKE '%abc'会导致全表扫描。 - N+1 问题:使用
JOIN fetch或 MyBatis 的<collection>标签预加载关联数据。 - 大事务:将非 DB 操作(如 HTTP 调用)移出事务范围,缩短连接占用时间。
⚡ 应用层优化
缓存策略 (Redis)
- Cache Aside Pattern: 读多写少场景,先读缓存,不中读库并回写;写时先更库,再删缓存。
- Spring Cache: 使用
@Cacheable,@CacheEvict简化操作。 - 穿透/击穿/雪崩防护:
- 穿透: 布隆过滤器或缓存空对象。
- 击穿: 热点 Key 过期前加互斥锁重建。
- 雪崩: 设置随机过期时间。
异步并发
使用 @Async 将耗时任务(发送邮件、短信)放入线程池执行,避免阻塞主线程。自定义 ThreadPoolTaskExecutor 替代默认线程池。
☕ JVM 调优
对于大多数微服务应用(4G 内存以下),推荐配置:
bash
# G1 垃圾回收器 (JDK 8+, JDK 11+ 默认)
-XX:+UseG1GC
# 设置最大/初始堆内存一致,避免动态扩容抖动
-Xms2g -Xmx2g
# 打印 GC 日志 (JDK 17+)
-Xlog:gc*:file=gc.log:time,uptime,level,tagsGraalVM Native Image
对于 Serverless 或快速启动场景,可使用 GraalVM 编译为原生镜像,启动时间可从秒级降至毫秒级,内存占用减少 50% 以上。