一、压测基础:吞吐量、QPS、TPS、并发用户数、响应时间等核心指标定义与关系

做性能测试这些年,我见过太多人一上来就堆机器、调参数,结果连最基本的指标都没搞清楚。说白了,压测不是玄学,它是一套可量化的工程方法。今天我们就从最核心的几个指标说起。

1.1 吞吐量(Throughput)——系统到底能扛多少?

吞吐量,顾名思义,就是系统在单位时间内能处理多少请求。它通常用 TPS(每秒事务数)或 QPS(每秒查询数)来衡量。

我个人习惯把吞吐量比作「高速公路的车流量」。路宽、限速高、车跑得快,单位时间通过的车就多。系统也一样——CPU、内存、IO、网络,哪个环节卡住,吞吐量就上不去。

核心公式:

吞吐量 = 并发用户数 / 平均响应时间

这个公式很关键,后面我们会反复用到。

我在项目中遇到过一个问题:某电商大促时,系统吞吐量突然掉了一半。查了半天,发现是数据库连接池配置太小,线程都在等连接。嗯,这就是典型的「吞吐量瓶颈」——不是机器不够,是资源分配不合理。

1.2 QPS 与 TPS——别再傻傻分不清

很多新手问我:QPS 和 TPS 到底有什么区别?

我一般这么解释:

  • QPS(Queries Per Second):每秒查询数。适用于读多写少的场景,比如搜索引擎、内容展示。
  • TPS(Transactions Per Second):每秒事务数。适用于写操作或完整业务流程,比如下单、支付。

举个例子:你打开一个商品详情页,浏览器发起了 10 个请求(图片、CSS、JS、接口数据)。这 10 个请求算 10 个 QPS。但如果这 10 个请求共同完成了一次「浏览商品」这个事务,那它只算 1 个 TPS。

我的建议:

压测时,如果系统是纯查询接口,用 QPS 就够了。如果是涉及写库、多步骤的业务流程,一定要用 TPS。我曾经见过有人用 QPS 去压支付接口,结果数据完全失真——因为一个支付事务可能包含 5-8 个接口调用。

1.3 并发用户数——不是越多越好

并发用户数,指的是同一时刻系统正在处理的用户请求数量。注意,是「正在处理」,不是「已连接」。

很多人以为并发用户数越大,系统压力越大。其实不然。你想想看:如果每个请求响应时间都是 1 秒,那 100 个并发用户和 1000 个并发用户,对系统的压力差别巨大。但如果响应时间只有 1 毫秒,那 1000 个并发用户可能也没什么感觉。

为什么会这样?因为并发用户数、响应时间、吞吐量三者是联动的。我习惯用一个公式来理解:

并发用户数 = 吞吐量 × 平均响应时间

这个公式反过来也成立:吞吐量 = 并发用户数 / 平均响应时间。所以,并发用户数只是一个中间变量,真正决定系统压力的是「吞吐量 × 响应时间」这个乘积。

避坑指南:

我曾经犯过一个错误:压测时只关注并发用户数,忽略了响应时间。结果并发从 100 升到 500,响应时间从 50ms 飙到了 2s,吞吐量反而下降了。后来我才明白——并发用户数不是目标,它是手段。我们的目标是找到系统在「可接受响应时间」下的最大吞吐量。

1.4 响应时间——用户感知的「快」与「慢」

响应时间,就是用户从发出请求到收到完整响应所花的时间。它通常包括:

  • 网络传输时间:数据在客户端和服务器之间来回的时间
  • 服务端处理时间:CPU 计算、数据库查询、IO 读写等
  • 排队等待时间:请求在队列里等着被处理的时间

我一般用「百分位响应时间」来评估,而不是平均值。为什么?因为平均值会被极端值拉偏。比如 99% 的请求都在 100ms 内完成,但有一个请求花了 10s,平均值可能就变成了 200ms——这完全掩盖了真实情况。

我个人习惯看 P99(99% 分位) 和 P95(95% 分位)。如果 P99 在 200ms 以内,用户体验基本没问题。如果 P99 超过 1s,那就得优化了。

1.5 核心指标关系图

下面这张图,是我自己总结的压测核心指标关系。你看一眼就能明白它们是怎么互相影响的:

压测核心指标关系图 并发用户数 吞吐量 (QPS/TPS) 响应时间 资源利用率 正相关 正相关 正相关 正相关 公式:吞吐量 = 并发用户数 / 平均响应时间

从这张图你能看到:并发用户数增加,吞吐量和响应时间都会上升。但响应时间一旦超过某个阈值,吞吐量反而会下降——这就是系统进入了「过载区」。我把它叫做「拐点」,找到这个拐点,就是压测的核心目标。

1.6 实战中的指标取舍

说了这么多,到底该关注哪些指标?我列个优先级:

优先级 指标 为什么重要
1 P99 响应时间 直接影响用户体验,也是系统健康度的晴雨表
2 吞吐量(QPS/TPS) 衡量系统处理能力,决定能否支撑业务峰值
3 错误率 超过 0.1% 就要警惕,超过 1% 必须停压排查
4 资源利用率 CPU、内存、IO、网络,哪个先到瓶颈?
5 并发用户数 作为参考,不是目标

我的经验:

压测时,我一般先定一个「可接受的响应时间」阈值(比如 P99 ≤ 200ms),然后逐步增加并发用户数,直到响应时间超标或错误率上升。这时候记录下来的吞吐量,就是系统的「最大安全吞吐量」。记住,是「安全」的,不是「极限」的——极限值往往伴随着高延迟和高错误率,生产环境用不上。

1.7 避坑指南:新手最容易犯的 3 个错误

  1. 只看平均值:平均值会骗人。我见过一个系统,平均响应时间 50ms,但 P99 是 5s——这意味着 1% 的用户在忍受 5 秒的延迟。所以,请务必看百分位。
  2. 混淆 QPS 和 TPS:压测前先搞清楚你的业务场景。如果是下单、支付这种写操作,用 TPS;如果是搜索、浏览这种读操作,用 QPS。混用会导致结论完全错误。
  3. 忽略预热:系统刚启动时,JIT 编译、缓存填充都没完成,这时候的压测数据是假的。我习惯先跑 5-10 分钟预热,等指标稳定了再开始记录。

嗯,以上就是压测基础的核心内容。这些指标就像医生的听诊器——你不需要天天用,但必须知道怎么看、怎么用。下一节我们会深入具体的压测工具和实战案例,到时候再细聊。

一句话总结:

压测不是比谁的数字大,而是找到系统在「可接受响应时间」下的「最大吞吐量」。并发用户数只是手段,不是目标。


想要更多资料,联系可可