压测指标详解:TPS/QPS、响应时间、错误率、资源利用率

做压测这么多年,我见过太多团队上来就盯着一个数字看。要么只看 QPS,要么只盯着响应时间。结果呢?线上该挂还是挂。

其实压测指标就像人的体检报告。只看体温不行,还得看血压、心率、血氧。今天咱们就把这四大类指标掰开揉碎了讲清楚。

核心观点:压测不是跑个数字就完事,而是通过多维度指标交叉验证,找到系统的真实瓶颈。

压测指标知识体系 压测指标体系 TPS / QPS 响应时间 错误率 资源利用率 吞吐量 并发能力 P50 / P95 / P99 长尾延迟 成功率 业务异常 CPU / 内存 / IO 💡 压测核心原则 单一指标不能说明问题,必须多维度交叉验证 例如:TPS 高但 P99 飙升,说明系统在“硬扛”

一、TPS 与 QPS:你到底能扛多少

先说说这两个最容易搞混的概念。TPS 是每秒事务数,QPS 是每秒查询数。我习惯这么区分:一个完整的业务操作算 TPS,一次简单的查询算 QPS。

举个例子。你点了个“提交订单”,后端可能调了 5 个接口。这时候 TPS 是 1,QPS 可能是 5。明白了吧?

我的习惯:压测时优先关注 TPS。因为它更贴近真实用户体验。QPS 更多用来做接口级容量规划。

怎么算 TPS?看这个公式:

TPS = 总事务数 / 压测持续时间(秒)

举例:
压测 60 秒,完成 12000 个订单提交
TPS = 12000 / 60 = 200

我在项目中遇到过一个问题:TPS 跑到 500 时,数据库连接池先爆了。你想想看,光看 TPS 数字漂亮没用,得看背后每个环节能不能跟上。

二、响应时间:别被平均值骗了

响应时间这块,我踩过最大的坑就是看平均值。平均响应时间 50ms,听起来很美对吧?但实际上一半的请求都超过 200ms。

所以业界普遍看百分位。常用的有三个:

指标 含义 典型阈值
P50(中位数) 50% 的请求在此时间内完成 < 200ms
P95 95% 的请求在此时间内完成 < 500ms
P99 99% 的请求在此时间内完成 < 1000ms

注意:P99 是排查长尾问题的关键。我曾经发现一个服务 P50 只有 30ms,但 P99 飙到了 3 秒。查了半天,原来是某个缓存 key 没命中,回源查数据库了。

为什么会这样?说白了,P99 暴露的是系统的“短板”。那 1% 的慢请求,往往就是线上故障的导火索。

三、错误率:零容忍还是可接受

错误率这个指标,不同业务容忍度完全不同。支付场景 0.01% 的错误都受不了,但一个资讯推荐服务,1% 的错误可能还能接受。

我一般这么分类:

  • 硬错误:HTTP 5xx、超时、连接拒绝。这类必须零容忍。
  • 软错误:业务返回码异常、数据校验失败。这类可以设定阈值。

压测时怎么算错误率?

错误率 = 错误请求数 / 总请求数 × 100%

举例:
总请求 10000,错误 23 个
错误率 = 23 / 10000 × 100% = 0.23%

避坑指南:我曾经遇到一个情况,错误率只有 0.1%,但全是下单接口报错。业务影响巨大。所以不光看整体错误率,还要按接口拆分看。

四、资源利用率:CPU、内存、IO

资源利用率是压测的“照妖镜”。它能告诉你系统到底卡在哪。

4.1 CPU 利用率

CPU 跑到 80% 以上就要警惕了。我习惯分两个维度看:

  • 用户态(user):业务代码在跑。占比高说明计算密集。
  • 系统态(sys):内核在干活。占比高说明系统调用频繁。

4.2 内存利用率

内存泄漏是压测中最头疼的问题之一。我一般关注三个点:

  • 堆内存使用趋势:是否持续增长
  • GC 频率和停顿时间
  • Swap 使用情况(有 swap 基本就废了)

4.3 IO 利用率

IO 分磁盘 IO 和网络 IO。磁盘 IO 高通常意味着日志写太多或者数据库刷盘频繁。网络 IO 高则可能是带宽瓶颈。

实战经验:有一次压测 TPS 上不去,CPU 才 30%,内存也够。查了半天发现磁盘 IO 跑满了。原来日志框架配置了同步刷盘,改成异步后 TPS 直接翻倍。

五、指标之间的关联分析

单个指标看完了,咱们说说怎么串起来看。这才是压测的精髓。

我总结了几种常见模式:

现象 可能原因 排查方向
TPS 低 + CPU 高 业务逻辑复杂,计算密集 优化算法,加缓存
TPS 低 + CPU 低 + IO 高 IO 瓶颈,等待磁盘或网络 检查数据库、日志、网络带宽
TPS 高 + P99 飙升 系统在极限边缘运行 扩容或限流
错误率上升 + 内存持续增长 内存泄漏导致 OOM dump 堆内存分析

切记:不要只看一个指标就下结论。我见过有人看到 CPU 高就加机器,结果发现是死循环。加再多机器也没用。

六、压测指标的最佳实践

最后分享几个我这些年总结出来的经验:

  1. 先定目标再压测。比如:TPS 必须到 1000,P99 不超过 500ms,错误率低于 0.1%。
  2. 阶梯加压。从 100 TPS 开始,每次加 100,观察指标变化。找到拐点。
  3. 持续压测。跑 30 分钟以上,看指标是否稳定。内存泄漏往往需要时间才能暴露。
  4. 记录基线。每次压测的结果都记录下来。方便对比优化效果。

嗯,指标这块就讲这么多。记住一句话:压测不是为了跑出好看的数字,而是为了找到系统的真实边界。下次你看到一份压测报告,别只看那个最大 TPS,把 P99、错误率、资源利用率都翻出来看看。你会发现很多有意思的东西。