Skip to content

🚀 全链路性能优化指南

性能优化是一个系统工程,本章节从数据库、应用代码、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 # 30min

SQL 调优 Checklist

  1. 索引失效:避免在索引列上进行计算或函数操作;LIKE '%abc' 会导致全表扫描。
  2. N+1 问题:使用 JOIN fetch 或 MyBatis 的 <collection> 标签预加载关联数据。
  3. 大事务:将非 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,tags

GraalVM Native Image

对于 Serverless 或快速启动场景,可使用 GraalVM 编译为原生镜像,启动时间可从秒级降至毫秒级,内存占用减少 50% 以上。

最后更新于: