2. 压测基础概念:并发用户数、吞吐量(QPS/TPS)、响应时间、错误率、P99/P95延迟
性能压测不是盲目施压,而是基于一组可量化的指标来评估系统行为。本章将逐一拆解压测领域的五个核心概念,并说明它们之间的因果关系与权衡。
2.1 并发用户数(Concurrent Users)
并发用户数指在同一时间窗口内,系统需要同时处理的活跃用户请求数量。注意,它不等于“注册用户数”或“日活用户数”,而是指在压测工具中同时维持的虚拟用户(VU)数量。
| 术语 | 定义 | 压测中的含义 |
|---|---|---|
| 并发用户数 | 同一时刻向系统发送请求的用户数 | 压测工具中同时运行的线程/协程数 |
| 在线用户数 | 已登录但可能无操作的用户 | 通常远大于并发用户数 |
| 注册用户数 | 系统总用户量 | 与压测负载无直接关系 |
实践要点:压测时通常从低并发(如 10 VU)开始,逐步递增,观察系统在并发增长下的行为拐点。
2.2 吞吐量:QPS 与 TPS
吞吐量是系统在单位时间内处理请求或事务的能力,是衡量系统处理效率的核心指标。
- QPS(Queries Per Second):每秒查询数,常用于读密集型系统(如搜索引擎、API 网关)。
- TPS(Transactions Per Second):每秒事务数,常用于写密集型或包含完整业务链路的系统(如订单创建、支付流程)。
一个事务可能包含多次查询,因此 TPS 通常 ≤ QPS。在压测报告中,两者常被统称为“吞吐量”。
| 指标 | 适用场景 | 典型值参考 |
|---|---|---|
| QPS | 缓存查询、搜索接口、列表页 | 单机 1000~10000+ |
| TPS | 下单、支付、注册、数据写入 | 单机 100~2000+ |
2.3 响应时间(Response Time / Latency)
响应时间是从客户端发出请求到收到完整响应所经过的总时长,通常以毫秒(ms)为单位。它直接反映用户体验。
响应时间可分解为:
- 网络延迟:数据在客户端与服务端之间传输的时间。
- 排队等待:请求在服务端队列中等待处理的时间。
- 服务处理:业务逻辑执行、数据库查询、外部调用等实际耗时。
- 响应传输:服务端将结果返回给客户端的时间。
关键认知:响应时间不是固定值,它会随并发用户数增加而上升。当系统资源耗尽时,响应时间会急剧恶化(拐点效应)。
2.4 错误率(Error Rate)
错误率指在压测过程中,返回非 2xx/3xx 状态码或业务自定义失败码的请求占比。计算公式:
错误率 = (错误请求数 / 总请求数) × 100%
常见的错误类型包括:
- HTTP 5xx:服务端内部错误、超时、网关错误。
- HTTP 4xx:限流、鉴权失败、参数错误(需结合业务判断)。
- 连接超时/重置:网络层或连接池耗尽。
- 业务错误码:如库存不足、余额不足等业务逻辑失败。
注意:压测中错误率应严格控制在 0.1% 以下(高可用系统要求 0.01% 以下)。错误率突然升高往往是系统过载或配置瓶颈的第一信号。
2.5 百分位延迟:P99 / P95
平均响应时间(Avg RT)容易被极端值掩盖,无法反映大多数用户的真实体验。百分位延迟(Percentile Latency)能更精确地描述延迟分布。
| 百分位 | 含义 | 解读 |
|---|---|---|
| P50(中位数) | 50% 的请求在此时间内完成 | 代表“典型”用户体验 |
| P95 | 95% 的请求在此时间内完成 | 代表“大多数”用户体验,常用于 SLA |
| P99 | 99% 的请求在此时间内完成 | 代表“尾部延迟”,反映系统稳定性 |
| P999 | 99.9% 的请求在此时间内完成 | 代表极端情况,用于高要求系统 |
例如:P99 = 500ms 意味着 99% 的用户在 500ms 内得到响应,只有 1% 的用户体验更差。
2.6 核心指标关系图
以下 SVG 图展示了五个核心指标之间的因果与制约关系:
2.7 指标间的权衡与典型曲线
在压测过程中,五个指标并非独立变化,而是遵循以下典型规律:
- 轻负载区:并发增加 → 吞吐量线性上升,响应时间平稳,错误率接近 0。
- 拐点区:资源接近饱和 → 吞吐量增速放缓,响应时间开始明显上升,P99 延迟率先恶化。
- 过载区:并发继续增加 → 吞吐量下降,响应时间急剧飙升,错误率显著升高。
压测目标:找到系统的“最佳并发点”——在该并发下吞吐量最大、响应时间仍在可接受范围、错误率趋近于零。这个点通常对应 P95 延迟的拐点。
2.8 压测指标速查表
| 指标 | 单位 | 理想范围 | 恶化信号 |
|---|---|---|---|
| 并发用户数 | VU | 根据系统容量设计 | 超过拐点值 |
| QPS / TPS | req/s 或 txn/s | 越高越好(线性增长区) | 增速放缓或下降 |
| 响应时间(平均) | ms | < 200ms(API) / < 500ms(页面) | > 1000ms |
| 错误率 | % | < 0.1% | > 1% |
| P99 延迟 | ms | < 2× 平均响应时间 | > 5× 平均响应时间 |
推荐做法:在压测报告中同时展示平均响应时间、P95、P99 三条曲线,而不是只给一个平均值。这能帮助团队快速定位尾部延迟问题。