性能测试基础:吞吐量、QPS、TPS、并发用户数、响应时间等核心概念解析
大家好,我是你们这堂课的讲师。做性能测试这么多年,我见过太多人一上来就堆工具、跑脚本,结果数据出来了,自己都看不懂。说白了,性能测试不是跑个分就完事了,你得先搞清楚那些基础概念到底在说什么。
今天这一章,我们就来把这些核心概念掰开揉碎了讲清楚。嗯,我保证不枯燥,而且会把我这些年踩过的坑也一并分享给你。
1. 吞吐量(Throughput)—— 系统到底能干多少活?
吞吐量,是我个人最看重的指标之一。它衡量的是系统在单位时间内能处理多少请求或数据量。你可以把它想象成一条高速公路——单位时间内能通过多少辆车。
- 单位:通常用
请求数/秒、字节数/秒或事务数/秒来表示。 - 场景:比如一个文件上传服务,吞吐量可能是 50 MB/s;一个 API 网关,可能是 2000 req/s。
我个人的经验:有一次压测一个电商系统的下单接口,吞吐量死活上不去。我排查了半天,发现是数据库连接池配得太小了。你想想看,池子就那么大,车再多也堵在门口。调大连接池后,吞吐量直接翻了一倍。
2. QPS(Queries Per Second)—— 每秒查询率
QPS 这个词,在互联网圈子里几乎天天被挂在嘴边。它特指系统每秒能响应的查询次数。注意,这里强调的是「查询」,通常用于读多写少的场景,比如搜索引擎、商品列表页。
为什么会单独拎出来说?因为很多系统读和写的性能差异巨大。你写一条数据可能要锁表、写日志,但读一条数据可能直接从缓存里拿,快得多。
避坑指南:我曾经遇到一个团队,把 QPS 和 TPS 混为一谈,结果压测报告写得一塌糊涂。记住,QPS 偏重读,TPS 偏重事务(通常包含读写)。
3. TPS(Transactions Per Second)—— 每秒事务数
TPS 是衡量系统处理完整事务的能力。一个事务可能包含多个操作,比如:登录(查询用户信息 + 生成 Token + 写日志),这就算一个事务。
在实际项目中,我习惯用 TPS 来衡量核心业务链路的性能。比如支付流程:扣库存、生成订单、调用支付网关、更新状态——这一整套下来,才算一个完整的事务。
| 指标 | 侧重点 | 典型场景 |
|---|---|---|
| QPS | 查询类操作 | 搜索、列表页 |
| TPS | 完整事务(含写操作) | 下单、支付、注册 |
注意:不要盲目追求高 TPS。我曾经见过一个系统,TPS 很高,但事务成功率只有 60%。那有什么用?压测时一定要同时关注成功率。
4. 并发用户数(Concurrent Users)—— 同时在线的人
并发用户数,指的是同一时刻正在与系统交互的用户数量。注意,是「正在交互」,不是「登录了但没操作」。
举个例子:一个直播间有 10 万人同时在线,但只有 1 万人在发弹幕、点赞。那并发用户数就是 1 万,而不是 10 万。
我刚开始做性能测试时,也犯过这个错。把注册用户数当成了并发用户数,结果压测脚本一跑,服务器直接挂了。嗯,教训深刻。
5. 响应时间(Response Time)—— 用户等多久?
响应时间,就是从用户发出请求到收到完整响应所花的时间。它通常包括:网络传输时间 + 服务器处理时间 + 数据库查询时间。
我个人习惯把响应时间分为三个维度来看:
- 平均响应时间:容易受极端值影响,比如一个请求卡了 10 秒,平均值就被拉高了。
- 中位数(P50):一半请求比这个快,一半比这个慢。更稳定。
- 百分位数(P95/P99):95% 或 99% 的请求都在这个时间内完成。这是用户体验的关键。
我建议:关注 P99 响应时间。因为那 1% 的慢请求,往往就是用户流失的根源。我在压测一个金融系统时,发现 P99 响应时间高达 5 秒,排查后发现是某个第三方接口超时重试导致的。
6. 这些概念之间的关系
说白了,这些指标不是孤立的。它们之间有一个经典的公式:
吞吐量(TPS) ≈ 并发用户数 / 平均响应时间
举个例子:如果并发用户数是 1000,平均响应时间是 0.5 秒,那 TPS 大约是 2000。如果响应时间变成 1 秒,TPS 就降到 1000 了。
所以,你想想看,优化响应时间,其实就是在间接提升吞吐量。这也是为什么我总说,性能调优要抓主要矛盾。
知识体系结构图
下面这张图,是我自己梳理的本章核心概念之间的关系,希望能帮你建立整体认知:
小结
这一章我们聊了五个核心概念:吞吐量、QPS、TPS、并发用户数、响应时间。它们就像性能测试的「五根手指」,缺一不可。你只有真正理解了它们,才能看懂压测报告,才能找到系统的瓶颈。
记住,不要死记硬背公式。下次你压测时,试着用这些概念去分析数据,你会发现,性能问题其实没那么神秘。
我的一个小习惯:每次压测前,我都会在白板上画出这几个指标的关系图,然后问自己一句:「如果响应时间翻倍,TPS 会变成多少?」想明白了再动手。