1. 压测基础
1.1 吞吐压测到底在测什么?
吞吐压测,说白了就是看系统能扛多少量。
我刚开始做性能测试那会儿,有个误区——以为压测就是拼命发请求,看系统什么时候挂。后来被一个老架构师点醒了:压测不是为了把系统打垮,而是为了找到它稳定运行的边界。
吞吐压测的核心目标就三个:
- 摸清上限——系统在不报错、不超时的前提下,每秒能处理多少请求
- 发现瓶颈——是CPU扛不住了?数据库锁冲突?还是网络带宽打满了?
- 验证容量——比如双11预估流量是平时的10倍,你的系统顶不顶得住?
我的经验:有一次压测一个支付接口,QPS到800就上不去了。查了半天,发现是日志框架的异步队列满了,丢日志比处理业务还慢。嗯,这种坑不压测根本发现不了。
1.2 为什么非要做性能回归?
你想想看,代码每天都在改。今天加个缓存,明天改个SQL,后天升级个框架版本。每次改动都可能让性能变差。
性能回归,就是每次上线前,把同样的压测场景再跑一遍,对比前后的数据。说白了,就是防止“改了个小功能,结果接口慢了3倍”这种惨案。
我见过最典型的场景:
- 开发同学加了个字段校验,结果循环里调了远程RPC,接口RT从20ms飙到500ms
- 升级了Redis客户端版本,连接池配置没改,导致连接数不够,请求排队
- 数据库加了索引,但查询走了另一个更慢的索引,反而变慢了
我曾经踩过的坑:有一次上线前没做性能回归,结果新版本上线后,核心接口的P99从50ms涨到了2秒。用户反馈“页面转圈圈”,紧急回滚才恢复。从那以后,我把性能回归加到了CI/CD流水线里,每次合并代码自动触发。
1.3 核心指标:QPS、TPS、RT、P99
这几个指标是压测的“仪表盘”,看不懂它们,压测就是瞎跑。
QPS vs TPS
很多人搞混这两个概念。我简单说:
- QPS(Queries Per Second)——每秒查询数。偏向读场景,比如搜索、列表查询
- TPS(Transactions Per Second)——每秒事务数。偏向写场景,比如下单、支付,一个事务可能包含多个请求
举个例子:你点一次“提交订单”,前端可能发3个请求(创建订单、扣库存、清购物车)。对业务来说,这是一个事务(TPS=1),但对服务器来说,它处理了3个请求(QPS=3)。
| 指标 | 适用场景 | 典型值参考 |
|---|---|---|
| QPS | 读多写少,如内容检索、商品列表 | 中小系统1000-5000,大厂核心接口10万+ |
| TPS | 写操作,如交易、支付、订单 | 电商下单通常几百到几千 |
我个人习惯:压测时同时关注QPS和TPS。如果QPS高但TPS低,说明系统读性能好但写性能差,可能数据库写入是瓶颈。
RT(Response Time)
响应时间,就是用户发一个请求到收到响应,花了多久。单位通常是毫秒。
RT不是单一数字,它是个分布。我习惯看这几个值:
- 平均RT——所有请求的平均值。容易被极端值拉偏,参考意义有限
- 中位数RT——排中间的那个值,代表“大多数用户”的体验
- P99 RT——99%的请求都在这个时间内完成,只有1%的请求比它慢
P99 为什么重要?
平均RT是骗人的。举个例子:
100个请求,99个都是10ms,1个是10秒。平均RT是(99×10 + 10000)/100 ≈ 109ms。看起来还行?但那个倒霉的用户等了10秒!
P99能告诉你:最慢的那1%用户,体验到底有多差。
我的经验:做性能回归时,我主要盯P99的变化。如果P99从100ms涨到150ms,哪怕平均RT没变,我也要查原因。因为那1%的慢请求,往往是系统即将崩溃的前兆。
1.4 指标之间的关系
这几个指标不是孤立的。我画个图帮你理解:
这个图想表达什么?
- QPS/TPS是“量”,RT是“质”,P99是“稳定性”
- 量上去了,质通常会下降。但好的系统,能在量增加时保持质稳定
- 当P99开始剧烈抖动,说明系统快撑不住了
避坑指南:压测时别只看平均RT。我见过一个系统,平均RT只有30ms,但P99是800ms。用户反馈“偶尔卡一下”,其实就是那1%的请求在作怪。所以我现在压测报告里,P99是必填项,平均RT反而放在次要位置。
1.5 压测前的准备工作
别上来就开压。我习惯先做三件事:
- 确定压测目标——比如“接口A在P99<200ms的前提下,QPS要达到5000”
- 准备压测数据——别用线上真实数据,但数据分布要模拟真实场景
- 监控到位——CPU、内存、IO、网络、GC、数据库连接池,一个都不能少
我曾经犯过的错:有一次压测没监控GC,结果系统频繁Full GC导致RT飙升,我还以为是代码问题。查了两天才发现是堆内存配小了。嗯,从那以后我压测前必开GC日志。
1.6 小结
吞吐压测不是玄学,它是有章可循的。记住几个要点:
- 压测是为了找边界,不是打垮系统
- 性能回归是护身符,每次上线前都要跑
- QPS看量,RT看质,P99看稳定性
- 指标要联动看,别孤立分析