第十八课:后端性能优化方法论——从 SQL 到 JVM 到接口(工程实战全景版)

目标:

当线上接口变慢时,你能 10 分钟判断方向,30 分钟定位问题,1 小时给出方案

不是靠感觉,而是一套固定流程。


一、性能优化第一原则:先"测"再"改"

性能优化不是一上来加缓存、加线程、加 MQ。

第一步永远是 ------ 拿数据。

你必须先看三类指标:

维度 看什么 目的
用户视角 接口耗时 P50 / P90 / P99 真实体验
系统视角 CPU / 内存 / GC / Load 资源是否打满
链路视角 Controller → Service → DAO → DB 找瓶颈段

二、P50 / P90 / P99 是什么?

这是 百分位响应时间(Percentile Latency)

含义

把所有请求耗时从小到大排序:

指标 含义 工程意义
P50 一半用户在这个时间内完成 大多数体验
P90 90% 用户在这个时间内完成 开始感觉慢
P99 99% 用户在这个时间内完成 是否被投诉

为什么看 P99?

平均值会骗人:

  • 99% 请求 100ms
  • 1% 请求 5 秒

平均值可能只有 150ms,

但用户只会记住那 5 秒。

工程结论:

P50 看整体,P90 看趋势,P99 看灾难。

三、标准优化流程(SOP)

这是你要记住的核心:

复制代码
Step1 看 P99
Step2 拆链路
Step3 SQL Explain
Step4 JVM 指标
Step5 压测验证
Step6 监控固化

四、三层分治法:接口层 → SQL 层 → JVM 层


1)接口层优化(入口层)

常见慢的原因

  • 返回体过大
  • DTO 字段太多
  • 日志打印大对象
  • N+1 RPC 循环调用
  • 超时重试雪崩

抓手表

现象 排查点 解决方案
偶发慢 Trace 链路 拆 RPC/DB 耗时
返回慢 Response Size 字段裁剪 / 分页
CPU 不高却慢 阻塞等待 timeout + 熔断
内存上涨 大集合 分页 / 流式
日志拖慢 打印过量 日志采样
循环慢 N 次 RPC 批量接口

口诀:

看返回体 → 看 RPC 次数 → 看日志大小

2)SQL / 数据库层优化(DAO)

六步 SQL 优化法

  1. 慢查询日志
  2. Explain
  3. 索引设计
  4. 减少扫描
  5. 减少回表
  6. 控制返回量

高频 SQL 坑

问题 原因 解决
全表扫描 没索引 建索引
type=ALL 索引失效 调整 where
filesort 排序无索引 联合索引
锁等待 长事务 拆事务
连接等待 池太小 扩容连接池
select * 回表重 字段裁剪

口诀:

慢 SQL → Explain → 索引 → 行数 → 锁 → 连接池

3)JVM 层优化(运行时)

常见瓶颈

  • GC 频繁
  • 大对象创建
  • 线程阻塞
  • 线程池打满
  • 锁竞争

抓手表

现象 排查点 解决
CPU 高 GC 减少对象
内存不降 Old Gen Dump 分析
P99 抖动 STW 调堆/G1
QPS 上不去 阻塞 异步化
Load 高 锁竞争 无锁化
吞吐低 线程多 减线程

口诀:

看 GC → 看线程 → 看对象 → 最后才调参数

五、三层联动排查顺序(实战)

顺序 行动 目标
1 看 P99 确认慢
2 打 Trace 找耗时段
3 SQL Explain 排 DB
4 JVM 指标 排 GC/线程
5 压测 验证优化
6 监控 防复发

六、工程化终点:让优化变成机制

不要每次救火,要形成体系:

机制 内容
慢 SQL 机制 慢日志 + 周报
压测机制 发版前压测
监控机制 P99 / 线程池 / GC
容量机制 QPS / 连接数预算
限流机制 防止雪崩

七、最小闭环实战(建议 Demo)

接口:GET /users?page=1&size=20

三阶段演进

  1. 初版:select * + 大 DTO(故意慢)
  2. SQL 优化:索引 + explain 对比
  3. JVM/接口优化:对象复用 + 日志采样

最终总结(记住这四句话)

复制代码
慢了先看 P99
再拆链路
SQL 看 explain
JVM 看 GC

性能优化不是技巧,而是一套固定流程。

只要流程不乱,你就不会"越改越慢"。

下一篇:

后端性能优化实战------一个接口从 2 秒到 90ms 的全过程

相关推荐
2301_768103493 小时前
HarmonyOS趣味相机实战第5篇:CameraKit资源释放、PixelMap生命周期与预览黑屏排查
性能优化·harmonyos·arkts·camerakit·pixelmap
段一凡-华北理工大学4 小时前
AI Agent 从入门到封神:24 讲打造你的超级智能体~系列文章23:从Demo到上线:Agent应用的架构设计、性能优化与成本控制实战
运维·网络·人工智能·性能优化·高炉炼铁·工业智能体
大师兄66684 小时前
HarmonyOS7 长列表性能优化:渲染与内存双提升
性能优化·长列表·harmonyos7
X1A0RAN4 小时前
Python 并发请求性能优化实战
python·性能优化·并发编程
爱喝水的鱼丶5 小时前
SAP-ABAP:ALV字段布局定制全攻略——快速适配业务端个性化展示需求
运维·性能优化·sap·abap·经验交流·alv报表
壮哥_icon16 小时前
【Android 系统开发】从掉帧卡顿到丝滑:高频硬件中断(IRQ)的 CPU 亲和性性能优化实战
android·性能优化
千里马学框架16 小时前
Android Framework 新手学习踩坑建议指南
android·智能手机·性能优化·framework·aaos·车载开发·系统工程师
天若有情67320 小时前
前端性能优化:从“按下预加载”到“AI级智能预判系统”
前端·性能优化·js·active·hover·首屏加载
yyt3630458411 天前
KlineChartQuant Tooltip 高频交互 200FPS 性能优化完整复盘
前端·经验分享·性能优化·typescript·vue·交互·chrome devtools
jump_jump1 天前
深入理解 GraphQL:一条查询到底是怎么执行的
性能优化·api·graphql