压测指标详解:QPS/TPS、响应时间、并发用户数、资源利用率
各位同学,咱们今天聊点实在的。做压测这么多年,我见过太多人一上来就盯着一个数字看,比如“QPS 必须到 10 万”。结果呢?压是压上去了,系统也崩了。为什么?因为没搞懂这些指标到底在说什么。
说白了,压测指标就像人的体检报告。你不能只看体温,还得看血压、心率、血氧。今天我就带你把这几项“体检指标”掰开揉碎了讲清楚。
核心观点:压测不是跑个数字就完事,而是通过指标之间的关联,找到系统的真实瓶颈。
1. QPS 与 TPS:系统的“吞吐量”
先讲最基础的。QPS 是每秒查询数,TPS 是每秒事务数。很多人搞混,我刚开始也犯过这个错。
QPS(Queries Per Second):一般用在读场景。比如你刷朋友圈,每刷一次就是一次查询。
TPS(Transactions Per Second):用在写场景,或者包含多个步骤的操作。比如下单,从点击“购买”到支付成功,这算一个完整事务。
举个例子:你打开一个电商首页,这算一次 QPS。但如果你下单、支付、确认收货,这算一次 TPS。嗯,这里要注意:TPS 通常包含多个 QPS。
我的经验:我在项目中遇到过,有人把 QPS 当 TPS 报给老板,结果上线后系统直接被打趴。为什么?因为一个 TPS 背后可能藏着 5-10 个 QPS。你压测时只看 QPS,实际流量一上来,数据库连接池瞬间就满了。
怎么算?很简单:
# 假设一个下单事务包含 3 次查询 + 1 次写入
# 如果系统 QPS 是 4000,那么实际 TPS 大约是:
TPS ≈ 4000 / 4 = 1000
所以,我建议你压测时,同时关注 QPS 和 TPS。别只看一个。
2. 响应时间:P50、P90、P99 到底看哪个?
响应时间,说白了就是用户等多久。但“平均响应时间”是个大坑。你想想看,100 个请求里,99 个是 10ms,1 个是 10s,平均下来还是 100ms 左右。这能说明系统快吗?不能。
所以我们看百分位:
- P50(中位数):一半请求比这个快,一半比这个慢。反映“大多数用户”的体验。
- P90:90% 的请求比这个快。反映“大部分用户”的体验,偶尔慢一点能接受。
- P99:99% 的请求比这个快。反映“最慢的那 1%”用户。这 1% 往往就是系统瓶颈。
我个人习惯:P99 是红线,P90 是黄线,P50 是绿线。P99 超过 500ms,我就开始警觉了。
避坑指南:我曾经遇到一个项目,P50 只有 20ms,看起来很快。但 P99 高达 5s。查了半天,发现是某个缓存失效时,会触发全表扫描。那 1% 的用户恰好踩到了这个坑。所以,别只看 P50,P99 才是真正的“用户体验杀手”。
响应时间的分布,我一般这样看:
| 指标 | 正常范围 | 警告范围 | 危险范围 |
|---|---|---|---|
| P50 | < 100ms | 100-300ms | > 300ms |
| P90 | < 200ms | 200-500ms | > 500ms |
| P99 | < 500ms | 500ms-1s | > 1s |
3. 并发用户数:别被数字骗了
并发用户数,指的是同一时刻有多少用户在“干活”。注意,是“干活”,不是“挂着”。
很多人把“在线用户数”当“并发用户数”,这是大忌。你想想看,一个 App 有 100 万日活,但真正同时操作的,可能只有 1 万人。这 1 万人里,又只有 10% 在发请求。所以实际并发可能只有 1000。
怎么估算?我有个土办法:
# 经验公式
并发用户数 ≈ 在线用户数 × 操作频率 × 请求耗时
# 举例:1 万人在线,每人每分钟操作 2 次,每次请求耗时 200ms
并发用户数 ≈ 10000 × (2/60) × 0.2 ≈ 67 人
你看,实际并发只有 67,不是 1 万。所以压测时,别一上来就压 1 万并发,那是在浪费机器。
我的建议:从 50 并发开始,逐步往上加。每次加 50,观察响应时间和资源利用率的变化。当响应时间突然飙升时,那个点就是系统的“拐点”。
4. 资源利用率:CPU、内存、IO
资源利用率,就是看系统“累不累”。CPU、内存、IO,这三兄弟要一起看。
- CPU:如果 CPU 跑到 90% 以上,说明计算能力是瓶颈。常见原因:复杂的业务逻辑、频繁的上下文切换。
- 内存:内存占用高,但不一定有问题。关键是看有没有“内存泄漏”。我习惯用
jstat看 GC 频率,如果 Full GC 频繁,那内存肯定有问题。 - IO:磁盘 IO 或网络 IO。如果 IO 等待时间长,说明数据读写是瓶颈。常见原因:慢 SQL、磁盘性能差。
这里有个经典场景:CPU 不高,但响应时间很长。为什么?大概率是 IO 在等。比如数据库查询慢,CPU 在等磁盘数据,所以 CPU 利用率上不去,但响应时间下不来。
避坑指南:我曾经遇到一个系统,CPU 只有 30%,但响应时间超过 2s。查了半天,发现是日志写得太频繁,磁盘 IO 被打满了。CPU 在等 IO 完成,所以看起来“不忙”,实际上系统已经快挂了。所以,资源利用率要组合看,别单看一个。
知识体系总览
下面这张图,是我自己总结的压测指标关系图。你把它存下来,每次压测前看一眼,思路就清晰了。
这张图想表达什么?很简单:并发用户数是输入,QPS/TPS、响应时间、资源利用率是输出。你给系统施加压力,系统会给你三个反馈。这三个反馈要一起看,才能判断系统到底行不行。
好了,这一章就到这里。记住:压测不是跑数据,而是读数据。读懂了这些指标,你才算真正入门了。