一、压力测试基础
什么是压力测试
压力测试,说白了就是「故意找茬」。
你搭建好一套交易系统,平时跑得挺欢。但你想过没有——如果突然涌进来10倍、100倍的订单,系统会怎样?
我刚开始做交易系统那会儿,就吃过这个亏。上线前觉得「差不多了」,结果双十一流量一上来,数据库连接池直接打满,订单全部超时。嗯,那晚我睡在机房,盯着监控屏幕发呆。
压力测试就是模拟这种极端场景。它不关心你的业务逻辑对不对,只关心一件事:系统到底能扛多少。
核心定义:压力测试是通过模拟高并发、高负载场景,验证系统在极限条件下的稳定性、可用性和性能表现的过程。
为什么需要压力测试
你可能觉得:「我的系统平时负载不高,有必要吗?」
我跟你讲个真实案例。有个做期货交易的朋友,系统平时每秒处理200笔订单,他觉得绰绰有余。结果某天突发行情,瞬间涌入5000笔订单——系统直接挂了,恢复用了40分钟。那40分钟里,每秒钟都在亏钱。
压力测试的价值,体现在三个层面:
- 发现瓶颈——数据库、缓存、网络、CPU,哪个先扛不住?
- 验证容量——系统到底能支撑多少用户、多少交易量?
- 保障稳定性——高负载下会不会崩溃?崩溃后能不能快速恢复?
我的经验:压力测试不是「做一次就完事」的。每次大版本上线前、每次硬件扩容后,都应该跑一遍。我曾经因为偷懒跳过一轮压测,结果上线后RT从10ms飙到800ms——那叫一个惨。
压力测试的核心指标
聊指标之前,先看一张图。这张图是我自己画的,帮你理解这几个指标之间的关系。
好,我们一个一个说。
1. TPS(每秒事务数)
TPS 全称是 Transactions Per Second。它衡量的是系统每秒能完成多少个完整的事务。
什么叫「完整的事务」?在交易系统里,一个事务可能包含:下单→扣库存→更新账户余额→生成订单。这一整套流程走完,才算一个事务。
我个人习惯把 TPS 当作「系统吞吐量的黄金指标」。为什么?因为它反映的是业务层面的处理能力,不是单纯的技术指标。
举个例子:你的交易系统 TPS 是 5000,意味着每秒能完成 5000 笔完整的交易。如果峰值流量到了 8000 TPS,系统就会开始排队、超时、甚至崩溃。
2. QPS(每秒查询数)
QPS 是 Queries Per Second。它衡量的是系统每秒能处理多少个请求。
注意,QPS 和 TPS 的区别:一个请求可能只是查询一下行情,不涉及写操作。而一个事务通常包含多个请求。
我在项目中遇到过一种情况:QPS 很高,但 TPS 很低。一查,原来是大量重复的行情查询请求占满了服务器资源,真正的交易反而被挤到后面去了。这就是典型的「查询拖垮交易」。
| 指标 | 含义 | 典型场景 |
|---|---|---|
| TPS | 每秒完成的事务数 | 下单、支付、转账 |
| QPS | 每秒处理的请求数 | 行情查询、订单查询 |
3. RT(响应时间)
RT 就是 Response Time,从发出请求到收到响应的时间差。单位通常是毫秒。
你想想看,用户点击「下单」按钮,等了 3 秒才看到结果——这体验能好吗?
RT 有两个关键分位数:
- P99——99% 的请求都在这个时间内完成。比如 P99 = 200ms,说明只有 1% 的请求超过 200ms。
- P999——99.9% 的请求都在这个时间内完成。更严格,通常用来衡量极端情况。
避坑指南:我曾经只看平均 RT,觉得「平均 50ms,挺好的」。结果一查 P99,好家伙,500ms。那 1% 的慢请求,恰恰是系统瓶颈的预警信号。记住:平均 RT 会骗人,分位数才是真相。
4. 错误率
错误率就是失败请求占总请求的比例。通常用百分比表示。
压力测试中,错误率是一个「一票否决」的指标。哪怕 TPS 再高、RT 再低,只要错误率超过阈值,系统就是不稳定的。
我给自己定的标准是:
- 正常负载下:错误率 < 0.01%
- 压力测试下:错误率 < 1%
- 超过 5%:立即停止压测,排查问题
我的习惯:压测时我会同时监控错误码分布。是 500 错误?是超时?还是业务校验失败?不同的错误码,指向不同的根因。光看一个「错误率 3%」是不够的。
四个指标的关系
这四个指标不是孤立的。它们之间有一条「跷跷板」规律:
随着压力增大,TPS 和 QPS 先上升,然后达到瓶颈,开始下降。与此同时,RT 和错误率开始飙升。
为什么会这样?
因为系统资源是有限的。当请求量超过处理能力,请求开始排队。排队时间越长,RT 就越高。队列满了,新请求直接被拒绝,错误率就上来了。
我习惯用一句话总结:TPS 是上限,RT 是体验,错误率是底线。
嗯,这一章的内容就到这里。记住这四个指标,它们是后续所有压测工作的基础。下一章我们会聊怎么搭建压测环境、选什么工具——到时候我会分享一些踩过的坑,保证有用。
本章小结:
- 压力测试是模拟极端场景,验证系统极限
- 核心指标:TPS(吞吐量)、QPS(请求量)、RT(响应时间)、错误率(稳定性)
- 四个指标相互关联,需要综合评估
- 不要只看平均值,分位数和错误分布才是关键