压测基础概念:吞吐量、延迟、QPS/TPS与黄金三指标

各位同学,今天我们聊聊压测最核心的几个概念。说实话,我见过不少工程师上来就开压,结果连自己测的是什么都没搞清楚。嗯,这就像开车不看仪表盘——迟早要出事。

我个人习惯,在开始任何压测之前,先把这几个基础概念刻在脑子里。它们是你分析性能问题的「元语言」。

一、吞吐量(Throughput)—— 你到底能扛多少?

吞吐量,说白了就是「单位时间内能处理多少事」。在显存池的场景下,就是每秒能完成多少次显存分配+释放操作。

举个例子:

  • 你的显存池每秒能处理 10 万次分配请求,那吞吐量就是 100K ops/s
  • 如果压到 20 万次,系统开始报错或超时,那 10 万就是当前配置下的极限吞吐

关键点:吞吐量不是固定值。它跟并发数、请求大小、硬件配置都有关。我曾在项目中遇到过,换了个 NUMA 节点,吞吐量直接掉了 30%。

二、延迟(Latency)—— 快不快,看这个

延迟就是「从发请求到收到响应,花了多久」。注意,这里说的是单个请求的耗时,不是平均值。

为什么我强调「单个请求」?因为平均值会骗人。你想想看:

  • 99% 的请求 1ms 完成
  • 1% 的请求 1000ms 完成
  • 平均延迟 ≈ 11ms —— 看起来还行?

但实际体验是,每 100 个用户里就有 1 个卡了 1 秒。这在线上是不可接受的。

我的习惯:看延迟,至少看 P50、P99、P999 三个分位值。P99 超过 10ms 的显存池,我一般直接打回优化。

三、QPS 与 TPS —— 别搞混了

这两个概念经常被混用,但严格来说有区别:

指标 全称 含义 显存池场景
QPS Queries Per Second 每秒查询数 每秒发起的显存分配请求数
TPS Transactions Per Second 每秒事务数 每秒完成的「分配+释放」完整事务数

在显存池压测中,我一般用 TPS。因为一次完整的显存使用周期是「分配→使用→释放」,这才是一个完整的事务。只测分配不测释放,就像只吃饭不洗碗——厨房迟早炸掉。

避坑指南:我曾经见过一个团队,QPS 压到 50 万,但 TPS 只有 10 万。为什么?因为分配快、释放慢,内存池被占满了,后续分配只能等。所以,只看 QPS 不看 TPS,等于自欺欺人。

四、压测的黄金三指标

做压测这么多年,我总结出三个必须盯死的指标。少了任何一个,你的压测报告就是废纸。

  1. 吞吐量(TPS) —— 系统能处理多少
  2. 延迟(P99 Latency) —— 用户感觉快不快
  3. 错误率(Error Rate) —— 系统稳不稳

这三者互相制约。你强行拉高吞吐,延迟就会飙升;你压到极限,错误率就会冒头。我个人的经验是:

  • 错误率 < 0.1% 是底线
  • P99 延迟 < 5ms 是优秀
  • 吞吐量达到设计目标的 120% 才算达标

记住:没有错误率的压测是耍流氓。我曾经接手过一个系统,压测报告显示吞吐 20 万、延迟 2ms,看起来完美。结果一查日志,错误率 5% —— 所有错误请求都被压测工具自动重试了,根本没统计进去。

五、知识体系总览

下面这张图,是我自己画的知识结构。每次做压测前,我都会扫一眼,提醒自己别漏了什么。

压测基础概念 吞吐量 (Throughput) 单位时间处理请求数 单位: ops/s, req/s 延迟 (Latency) 单次请求耗时 关注 P50/P99/P999 QPS vs TPS 查询 vs 事务 显存池场景用 TPS 黄金三指标 吞吐量 + 延迟(P99) + 错误率 三者互相制约:提高吞吐 → 延迟上升 → 错误率可能增加 压测的核心:在可接受的延迟和错误率下,找到最大吞吐

六、实战中的一点体会

最后说点实在的。这些概念看起来简单,但真正用好它们,需要大量实践。我刚开始做压测时,也犯过只看平均延迟的错。后来被线上故障教育了几次,才老老实实把 P99 和错误率焊死在监控面板上。

嗯,今天就到这里。记住这三个指标,你的压测之路就稳了一半。

一个小建议:下次做压测前,先问自己三个问题——我的吞吐目标是多少?P99 延迟能接受多少?错误率容忍上限是多少?答不上来,就别开始。

可可精品资料库