压测指标详解:QPS、TPS、RT、P99延迟、吞吐量、并发用户数
做压测这么多年,我见过太多人一上来就盯着一个数字看。要么只看QPS,要么只看并发数。其实啊,压测就像体检,光量体温是不够的。你得把几个关键指标放在一起看,才能判断系统到底「健康不健康」。
今天我就把这几个核心指标掰开揉碎了讲。每个指标我都会告诉你:它是什么、怎么算、实际项目中怎么用、以及最容易踩的坑。
1. QPS 和 TPS:别再傻傻分不清
先说QPS,全称是 Queries Per Second,每秒查询数。TPS 是 Transactions Per Second,每秒事务数。
这两个词经常被混用,但严格来说不一样。QPS 偏重「读」操作,比如你查一次数据库、调一次接口,就算一个 Query。TPS 偏重「写」操作,或者更准确地说,是一个完整的事务——可能包含多个步骤。
举个例子:用户下单这个操作,在TPS视角里是一个完整事务。但在QPS视角里,它可能拆成了:查询商品、查询库存、创建订单、扣减库存、返回结果——这就算5个Query。
怎么算?公式很简单:
QPS = 总请求数 / 总耗时(秒)
TPS = 总事务数 / 总耗时(秒)
举个例子,你压了60秒,总共发了12000个请求,那QPS就是200。如果这些请求里包含了3000个完整事务,那TPS就是50。
2. RT:响应时间,用户最直接的感受
RT 就是 Response Time,响应时间。说白了,就是用户点一下按钮,到看到结果,中间等了多久。
这个指标最直观,也最容易理解。但很多人只关注「平均响应时间」,这是个巨大的坑。
为什么? 你想想看,平均响应时间200ms,听起来不错对吧?但实际情况可能是:90%的请求都在50ms内完成,剩下10%的请求拖到了1.5秒。用户如果恰好是那10%,体验就很差了。
所以我个人习惯,看RT一定要结合百分位来看。常用的有:
- RT_mean:平均响应时间,仅供参考,别太当真
- RT_max:最大响应时间,往往是个异常值,但能帮你发现极端情况
- P50:中位数,一半请求比这个快,一半比这个慢
- P90:90%的请求都在这个值以内
- P99:99%的请求都在这个值以内,这是重点
3. P99延迟:压测中最容易被忽视的指标
P99延迟,全称是 99th Percentile Latency。它衡量的是:在100个请求里,排第99快的那个请求花了多长时间。
我见过太多团队,压测报告里只写「平均响应时间50ms」,结果上线后用户投诉说「卡死了」。一查P99,好家伙,800ms。平均响应时间被大量快速请求拉低了,但慢请求其实很多。
为什么会这样? 因为系统的性能分布往往不是均匀的。可能有以下原因:
- GC(垃圾回收)导致偶尔的停顿
- 网络抖动
- 数据库连接池不够用
- 某些请求走了慢路径(比如缓存失效,查了数据库)
我建议你压测时,至少关注三个值:P50、P90、P99。如果P99比P50高出5倍以上,说明系统存在严重的「长尾延迟」问题,需要排查。
4. 吞吐量:系统到底能扛多少
吞吐量(Throughput),指的是单位时间内系统能处理的请求数量。单位可以是:
- 请求/秒(req/s)
- 事务/秒(tps)
- 字节/秒(B/s)
- 页面/秒(pages/s)
吞吐量和QPS很像,但侧重点不同。QPS更偏向「瞬时能力」,吞吐量更偏向「持续能力」。你压测10秒和压测10分钟,得到的吞吐量可能完全不同。
为什么? 因为系统有「预热」和「衰减」的过程。刚启动时,缓存是空的,数据库连接还没建立,吞吐量会偏低。运行一段时间后,缓存命中率上来了,吞吐量会上升。再往后,如果内存泄漏或者连接池耗尽,吞吐量又会下降。
所以我做压测时,一般会分三个阶段:
- 预热阶段:跑1-2分钟,让系统进入稳定状态
- 稳定阶段:跑5-10分钟,记录吞吐量
- 压力阶段:逐步增加并发,找到吞吐量的拐点
5. 并发用户数:不是越多越好
并发用户数(Concurrent Users),指的是同一时刻有多少个用户在访问系统。注意,是「同一时刻」,不是「一天的总用户数」。
很多人有个误区:觉得并发用户数越大越好。其实不是。并发用户数和系统性能之间,存在一个「拐点」。
举个例子:
| 并发用户数 | QPS | 平均RT | P99延迟 |
|---|---|---|---|
| 100 | 2000 | 50ms | 80ms |
| 200 | 3800 | 52ms | 85ms |
| 500 | 4500 | 110ms | 350ms |
| 1000 | 4200 | 240ms | 1200ms |
看到没?并发从500增加到1000时,QPS反而下降了。这就是系统过载了——线程太多,上下文切换开销超过了处理能力。
最佳并发数,就是QPS达到最大值时的那个并发数。超过这个数,系统性能反而下降。
6. 这些指标怎么配合使用?
单个指标看都是片面的。我一般会这样组合:
- 看QPS/TPS:判断系统处理能力
- 看RT/P99:判断用户体验
- 看吞吐量:判断系统稳定性
- 看并发用户数:找到最佳工作点
举个例子,你压测一个电商系统的下单接口:
并发用户数: 200
QPS: 1500
TPS: 300(因为一个下单事务包含5个请求)
平均RT: 130ms
P99延迟: 280ms
吞吐量: 300 TPS
这个数据说明什么?系统能扛住200个并发用户,每秒处理300个订单,99%的订单在280ms内完成。如果业务要求P99 < 200ms,那这个系统就不达标,需要优化。
7. 一张图看懂压测指标关系
下面这张图,是我自己总结的压测指标关系图。你看完应该能明白,这些指标不是孤立的,而是互相影响的。
这张图的核心逻辑是:并发用户数是输入,QPS和RT是输出,吞吐量是最终结果。你调整并发数,QPS和RT会跟着变,最终决定系统的吞吐量。
嗯,指标就讲到这里。记住一句话:没有完美的指标,只有合适的组合。下次做压测,别只看一个数了。
想要更多资料,联系可可