2、核心指标定义:响应时间、吞吐量、并发用户数、错误率、资源利用率(CPU/内存/IO)
做性能回归对比,说白了就是拿两轮测试数据放一起比。但比什么呢?你得先知道看哪些指标。我见过不少团队,一上来就盯着响应时间看,结果系统挂了都不知道为什么。今天我把五个核心指标掰开揉碎了讲清楚。
2.1 响应时间:用户最直接的感受
响应时间,就是从用户发出请求到收到完整响应所花的时间。单位通常是毫秒或秒。我个人习惯把它拆成三部分:
- 网络传输时间:数据在客户端和服务器之间来回跑的时间
- 服务处理时间:服务器真正干活的时间
- 排队等待时间:请求在队列里等着被处理的时间
我在项目中遇到过一个问题:某接口平均响应时间只有 50ms,但用户总说卡。后来一查,原来是 99 分位响应时间到了 3 秒。你想想看,平均时间会掩盖掉那些慢请求。所以我的建议是:
重点关注 TP95、TP99 甚至 TP999 分位值,而不是只看平均值。
举个例子,一个电商下单接口,压测数据如下:
| 指标 | 基线版本 | 新版本 | 变化 |
|---|---|---|---|
| 平均响应时间 | 120ms | 135ms | +12.5% |
| TP95 | 280ms | 410ms | +46.4% |
| TP99 | 520ms | 890ms | +71.2% |
看到没?平均只涨了 12%,但 TP99 快翻倍了。这种回归,必须深挖。
2.2 吞吐量:系统能扛多少活
吞吐量,单位时间内系统能处理的请求数量。常见单位有 TPS(每秒事务数)、QPS(每秒查询数)、RPS(每秒请求数)。
说白了,响应时间看的是快不快,吞吐量看的是多不多。这两个指标通常成反比——你让系统跑得更快,它往往能处理更多请求。但也不是绝对的,我踩过这个坑。
我曾经优化了一个接口的响应时间,从 200ms 降到了 50ms,结果吞吐量反而下降了。为什么?因为我加了缓存,但缓存击穿导致大量线程阻塞。嗯,这里要注意:优化单个请求,可能引发全局连锁反应。
回归对比时,我一般这样看吞吐量:
- 相同并发下,新版本吞吐量是否下降超过 5%
- 吞吐量曲线是否出现异常抖动
- 最大吞吐量是否降低
2.3 并发用户数:到底有多少人在用
并发用户数,不是指系统总用户数,而是同一时刻正在发起请求的用户数。注意,是在线的,不是注册的。
我见过有人把注册用户数当并发数汇报,那完全是两码事。并发用户数直接影响系统的资源消耗。回归测试时,我习惯这样设计:
- 从低并发开始(比如 10 个用户)
- 逐步增加,直到系统出现瓶颈
- 记录每个并发级别下的响应时间和吞吐量
对比时,重点关注:在相同并发下,新版本的性能是否变差。如果新版本在 500 并发时就扛不住了,而基线能扛到 800,那就是明显的回归。
小技巧:并发用户数不是越高越好。找到系统的「拐点并发」——就是再增加用户,吞吐量不再增长的那个点。这个点最能反映系统容量。
2.4 错误率:系统稳不稳
错误率,就是失败请求占总请求的比例。通常用百分比表示。HTTP 层面常见的有 4xx、5xx,业务层面还有自定义错误码。
回归对比时,错误率的变化往往比响应时间更致命。我遇到过的情况:
- 基线版本错误率 0.1%,新版本错误率 2.3%——这绝对是有 bug
- 错误率从 0% 涨到 0.5%,但响应时间没变——可能是超时设置变了
- 错误率集中在某个特定接口——大概率是那个接口改了逻辑
我的原则:错误率超过 1% 就必须停下来分析。别想着「先跑完再说」,那是在浪费时间。
2.5 资源利用率:服务器累不累
资源利用率包括 CPU、内存、磁盘 I/O、网络 I/O。这些指标告诉你,系统到底把硬件用到了什么程度。
我一般这样看:
| 资源 | 正常范围 | 警戒线 | 说明 |
|---|---|---|---|
| CPU | 40%-70% | >85% | 超过 85% 可能开始排队 |
| 内存 | 60%-80% | >90% | 小心 OOM 或频繁 GC |
| 磁盘 I/O | 利用率 <60% | 等待时间 >10ms | I/O 等待是性能杀手 |
| 网络 I/O | 带宽 <70% | 丢包率 >0.1% | 网络瓶颈容易被忽略 |
回归对比时,我最关注的是:同样的负载下,资源消耗是否变高了。如果响应时间没变,但 CPU 从 50% 涨到了 75%,说明代码效率下降了。
我曾经遇到一个案例:新版本上线后,CPU 直接飙到 95%,但响应时间反而快了。后来发现是加了死循环重试机制——用 CPU 换响应时间,这绝对是个馊主意。
2.6 五个指标的关系
这五个指标不是孤立的。我画了张图,帮你理清它们之间的关系:
从图上你能看到:并发用户数上去后,资源利用率跟着涨,响应时间变长,吞吐量到拐点后开始下降,错误率在资源耗尽时飙升。这就是连锁反应。
回归对比时,我建议你把这五个指标放在一张表里看。别单独看某一个,那会漏掉关键信息。
我的习惯:每次回归测试,先看错误率有没有变化,再看资源利用率是否异常,最后才看响应时间和吞吐量。顺序很重要,能帮你快速定位问题。
好了,这五个指标的定义和关系就讲到这里。记住,指标是工具,不是目的。目的是通过它们发现性能回归,找到根因,然后修复它。