3. 压力测试基础:定义、区别与关键指标

压力测试是性能工程中最高风险、最具挑战性的环节。本章从定义出发,厘清压力测试与负载测试的本质区别,并建立一套可量化的关键性能指标(KPI)体系,为后续 Champion Challenger 实验设计打下基础。

3.1 压力测试定义

压力测试(Stress Testing)是指通过持续增加系统负载,使其超过正常容量上限,观察系统在极限或异常条件下的行为、恢复能力和故障模式。其核心目标不是验证系统“能处理多少用户”,而是回答三个问题:

  • 系统何时崩溃? — 找到容量拐点(Breakpoint)。
  • 崩溃后如何表现? — 优雅降级、部分可用还是完全宕机。
  • 恢复速度与完整性? — 压力释放后能否自动恢复至正常状态。
关键认知: 压力测试不是为了证明系统“好”,而是为了暴露系统“在什么条件下会坏、坏到什么程度、能否自愈”。Champion Challenger 实验中,压力测试结果直接决定哪个模型在极端场景下更可靠。

3.2 负载测试 vs 压力测试:核心区别

两者常被混淆,但目标、方法和结果判读完全不同。下表从六个维度进行对比:

对比维度 负载测试 压力测试
核心目标 验证系统在预期负载下的性能表现 探索系统在超载下的极限与故障行为
负载范围 0 ~ 预期峰值(通常 80%~120%) 预期峰值 ~ 崩溃点(通常 120%~300%+)
关注指标 响应时间、吞吐量、资源利用率 错误率、恢复时间、降级模式、数据一致性
期望结果 所有指标在 SLA 范围内 明确崩溃点、降级策略有效、可自动恢复
测试频率 每次发布前、容量规划时 重大架构变更、混沌工程、季度稳定性评估
风险等级 低(可控负载) 高(可能引发生产级故障)
实践建议: 在 Champion Challenger 实验中,先用负载测试筛选出“正常条件下性能合格的候选模型”,再用压力测试选出“极端条件下最稳健的冠军模型”。两个阶段不可互换。

3.3 关键性能指标(KPI)体系

压力测试需要一套多维度的 KPI 来量化系统行为。以下是最核心的六类指标:

  1. 吞吐量(Throughput) — 单位时间内完成的请求数(TPS/QPS)。压力测试中关注“峰值吞吐量”和“崩溃前最大吞吐量”。
  2. 响应时间(Response Time) — 包括平均、P50、P95、P99。压力测试更关注 P99 和 P999 在超载时的退化曲线。
  3. 错误率(Error Rate) — HTTP 5xx、超时、连接拒绝的比例。压力测试中错误率从 0% 跳变到 100% 的点即为崩溃点。
  4. 资源利用率(Resource Utilization) — CPU、内存、磁盘 I/O、网络带宽。压力测试关注哪个资源最先成为瓶颈。
  5. 恢复时间(Recovery Time) — 从压力释放到系统恢复正常服务的时间。Champion Challenger 中恢复时间短的模型胜出。
  6. 降级幅度(Degradation Ratio) — 超载时功能可用率或性能下降的比例。例如:搜索功能降级为只读模式。
常见误区: 只关注平均响应时间而忽略 P99 和错误率。压力测试中,平均响应时间可能仍在 SLA 内,但 P99 已飙升 10 倍,错误率已超过 5%。必须使用多分位指标组合判断。

3.4 压力测试 KPI 关系图

下图展示了压力测试中负载递增时各 KPI 的典型变化趋势:

压力测试 KPI 变化趋势 压力测试 KPI 变化趋势(负载递增) 负载(并发用户数 / TPS) 指标值 吞吐量 P99 响应时间 错误率 ▲ 崩溃点 正常区 崩溃区 关键观察 吞吐量先升后降 P99 和错误率在崩溃点急剧恶化

3.5 压力测试流程与 Champion Challenger 结合点

在 Champion Challenger 框架中,压力测试按以下步骤执行:

  1. 基线建立 — 对当前生产模型(Champion)执行压力测试,记录所有 KPI 基线值。
  2. 候选模型加载 — 对 Challenger 模型执行相同压力测试脚本,保持负载模型一致。
  3. 多维度对比 — 使用 3.3 节中的六类 KPI 进行逐项对比,生成差异矩阵。
  4. 崩溃点排序 — 按“崩溃点负载值”从高到低排序,崩溃点最高的模型获得最高权重。
  5. 恢复能力评分 — 测量每个模型在压力释放后的恢复时间,恢复时间最短的模型加分。
  6. 综合决策 — 结合负载测试结果和压力测试结果,选出最终 Champion。
Champion Challenger 关键规则: 如果 Challenger 在负载测试中性能优于 Champion 10% 以上,但在压力测试中崩溃点低于 Champion 20% 以上,则 Challenger 不能晋升。压力测试结果具有一票否决权。

3.6 压力测试 KPI 对比矩阵示例

以下是一个 Champion vs Challenger 压力测试结果对比表示例:

KPI 指标 Champion(当前生产) Challenger A Challenger B 判定标准
崩溃点(并发用户) 5,200 6,800 4,500 越高越好
崩溃时 P99 响应时间 12,000 ms 8,500 ms 15,200 ms 越低越好
恢复时间(秒) 45 s 22 s 78 s 越低越好
降级幅度(功能可用率) 60% 85% 40% 越高越好
资源瓶颈类型 CPU 内存 磁盘 I/O 可扩展性评估
分析结论: Challenger A 在所有压力测试 KPI 上均优于 Champion,且崩溃点高出 30%,恢复时间缩短 51%,是理想的晋升候选。Challenger B 崩溃点低于 Champion,且恢复时间过长,应被淘汰。

3.7 压力测试 KPI 雷达图

下图使用雷达图直观对比 Champion 与 Challenger 在五个核心压力测试维度上的表现:

压力测试 KPI 雷达对比图 压力测试 KPI 雷达对比图 崩溃点 P99 响应 恢复时间 降级幅度 错误率 Champion Challenger A 雷达图解读 面积越大 = 综合压力表现越好 Challenger A 全面优于 Champion

3.8 压力测试常见陷阱与避坑指南

  • 陷阱一:负载递增速度过快 — 导致系统来不及触发限流/降级机制,直接崩溃。应使用阶梯式递增(每步保持 30~60 秒稳定期)。
  • 陷阱二:忽略冷启动效应 — 首次压力测试时缓存未预热,结果不可代表稳态。应执行 2~3 轮预热后再记录数据。
  • 陷阱三:只测一个维度 — 仅增加并发用户数而不增加数据量或请求复杂度。压力测试应同时放大“用户数”和“数据规模”。
  • 陷阱四:恢复时间测量不准确 — 压力释放后立即检查健康检查接口,但业务线程池可能仍在排队。应等待所有积压请求处理完毕后再判定恢复。
  • 陷阱五:忽略资源竞争 — 压力测试环境中其他进程(监控 Agent、日志采集)可能干扰结果。应使用专用环境或容器隔离。
Champion Challenger 特别提醒: 如果两个模型在压力测试中崩溃点接近(差异 < 5%),必须进一步对比“崩溃后的行为模式”——是优雅降级还是直接 503?是部分用户可用还是全局不可用?这些定性差异往往决定最终选择。