2. 压力测试基础:定义、目的与关键指标
压力测试(Stress Testing)是性能工程中最核心的验证手段之一。它通过向系统施加超出正常预期的负载,观察系统在极限状态下的行为表现,从而发现潜在的瓶颈、稳定性缺陷与容量边界。
2.1 压力测试的定义
压力测试是一种破坏性的性能测试方法。与负载测试(Load Testing)不同,压力测试的目标不是验证系统在预期流量下是否正常,而是回答一个关键问题:“系统在超过设计容量后,会如何失效?”
| 对比维度 | 负载测试 | 压力测试 |
|---|---|---|
| 目标 | 验证正常容量下的响应能力 | 发现极限状态下的失效模式 |
| 负载范围 | 50% ~ 120% 预期峰值 | 120% ~ 300% 预期峰值 |
| 关注点 | 响应时间、吞吐量 | 错误率、恢复能力、资源耗尽 |
| 典型场景 | 日常峰值流量模拟 | 秒杀、突发流量、雪崩测试 |
2.2 压力测试的核心目的
压力测试不是简单的“把系统打挂”,而是有明确的工程目标:
- 发现容量天花板:确定系统在可接受错误率下的最大吞吐量。
- 暴露隐藏瓶颈:CPU、内存、数据库连接池、线程池、IO 等在高压下的短板。
- 验证降级与熔断:检查限流、熔断、降级策略是否按预期生效。
- 评估恢复能力:压力释放后,系统能否自动恢复到正常状态。
- 建立性能基线:为后续的 A/B 分流、架构变更提供对比基准。
关键认知: 压力测试的价值不在于“测到多少 TPS”,而在于“系统在崩溃前给出了什么信号”。优秀的压力测试报告应该包含明确的失效边界和恢复时间。
2.3 四大关键指标详解
压力测试的量化分析依赖四个核心指标:TPS、QPS、RT、错误率。这四个指标必须联合解读,单一指标无法反映系统全貌。
2.3.1 TPS(Transactions Per Second)
TPS 表示系统每秒处理的事务数。一个事务通常包含一组完整的业务操作(例如:一次下单包含库存扣减、订单生成、支付请求)。
- 适用场景:数据库事务、金融交易、订单处理等有状态业务。
- 注意:TPS 高不一定代表系统好,必须结合事务的成功率。
2.3.2 QPS(Queries Per Second)
QPS 表示系统每秒处理的查询或请求数。在 Web 服务中,QPS 通常指 HTTP 请求的吞吐量。
- 适用场景:API 网关、缓存查询、搜索引擎、静态资源服务。
- 与 TPS 的关系:一个事务可能包含多个查询(QPS ≥ TPS)。
| 指标 | 典型计算方式 | 常见误区 |
|---|---|---|
| TPS | 成功事务数 / 测试时长(秒) | 将重试请求计入 TPS |
| QPS | 总请求数 / 测试时长(秒) | 忽略非 2xx 响应 |
2.3.3 RT(Response Time)
RT 即响应时间,指从客户端发出请求到收到完整响应所经过的时间。压力测试中通常关注以下分位值:
- P50(中位数):半数请求的响应时间,反映典型体验。
- P95:95% 的请求在此时间内完成,代表大多数用户的体验。
- P99:99% 的请求在此时间内完成,用于排查长尾延迟。
- Max:最大响应时间,通常伴随错误或超时。
实践建议: 压力测试中,当 P99 RT 开始急剧上升时,通常意味着系统资源(如线程池、连接池)即将耗尽。这是比 TPS 下降更早的预警信号。
2.3.4 错误率(Error Rate)
错误率 = 错误请求数 / 总请求数 × 100%。错误类型包括:
- HTTP 5xx:服务端内部错误。
- 超时:请求在指定时间内未得到响应。
- 连接拒绝:服务端连接池或线程池已满。
- 业务错误:如库存不足、校验失败(需区分是否由压力引起)。
压力测试中,错误率 0% 通常意味着压力还不够大。合理的压力测试应该找到错误率从 0% 开始跳变的拐点。
2.4 指标关联与拐点分析
下图展示了压力测试中 TPS、RT、错误率随并发用户数变化的典型曲线:
常见陷阱: 不要只看 TPS 峰值。很多团队在压力测试中只报告“最高 TPS 达到 5000”,却忽略了此时 RT 已从 50ms 飙升到 5s,错误率达到 15%。正确的做法是:在错误率 < 1%、RT P99 在可接受范围内的前提下,记录最大 TPS。
2.5 指标在 A/B 分流中的使用
在后续章节的 A/B 分流验证中,这四个指标将作为分流对比的量化依据:
- 基线版本(A):记录压力测试下的 TPS、RT、错误率基线。
- 实验版本(B):在相同压力模型下,记录对应指标。
- 对比规则:若 B 版本的 TPS 提升 ≥ 10% 且 RT P99 不劣化超过 5%,则判定为正向优化。
| 指标 | A 版本(基线) | B 版本(实验) | 判定 |
|---|---|---|---|
| TPS | 3200 | 4100 | +28% ✅ |
| RT P99 | 120ms | 115ms | -4% ✅ |
| 错误率 | 0.3% | 0.4% | 可接受 ✅ |
2.6 本章小结
压力测试是性能验证的基石。掌握 TPS、QPS、RT、错误率这四个指标的定义、计算方式和联合解读方法,是后续进行回放验证和 A/B 分流的前提。记住:没有基线,就没有对比;没有拐点,就没有深度。