做性能测试时,两句话最容易吵起来:"我这台机器能扛 5000 并发"和"我这台机器 QPS 只有 800"。听起来都在说性能,其实是两个完全不同的东西。搞不清 QPS 和并发连接数的区别,压测报告就会写成糊涂账:明明并发拉到了几千,QPS 却上不去,到底是机器不行还是参数不对?
这篇文章把这两个指标讲清楚:QPS/TPS 是什么、并发连接数是什么、它们差在哪、用 Little's Law 怎么换算、压测中怎么分别测量、以及几个最常见的误解。理解之后,你就能一眼看穿别人性能报告里"并发"到底指什么,也能自己估算服务器容量。
一、QPS / TPS:速率指标
QPS(Queries Per Second) 指每秒处理的请求数,是"速率"。它回答的问题是:单位时间内,服务器处理完多少个请求。单位是"次/秒"。
TPS(Transactions Per Second) 指每秒完成的事务数。事务可以理解为一次完整的业务操作,可能包含多个请求。比如一次下单,内部可能查库存、扣库存、生成订单、发消息,是若干请求组成的一个事务。所以 TPS 的口径通常比 QPS 粗,数值一般也小于等于 QPS。
两者都是"速率",衡量的是吞吐能力。它们的特点是:只要业务稳定,这个数字在一段时间内是相对持续的。
二、并发连接数:瞬时并存数
并发连接数指同一时刻处于"打开并处理中"状态的连接或请求数量,是"瞬时值"。
要特别区分两个容易混的概念:
- 并发连接数(TCP 层面):服务器上同时保持着多少条 TCP 连接。用
ss -s或netstat能看当前状态。很多连接可能是keep-alive空闲挂着的,不消耗多少 CPU。 - 活跃并发(请求处理层面):同一时刻正在被处理的请求数。这个才和 QPS 强相关。
"并发 5000"到底是 5000 条空闲长连接,还是 5000 个正在处理的请求,性能含义天差地别。 前者可能很轻松,后者可能直接把服务器压垮。所以谈并发,一定要说清楚是哪一种。
三、两者到底差在哪
一句话概括:QPS 是"每秒做了多少",并发是"同一时刻有多少在做"。 一个是流量(速率),一个是存量(水位)。
| 维度 | QPS / TPS | 并发连接数 |
|---|---|---|
| 性质 | 速率(每秒多少) | 瞬时并存数 |
| 单位 | 次/秒 | 个(连接/请求) |
| 反映 | 吞吐能力 | 同时处理的能力 / 连接占用 |
| 受什么影响 | 处理速度、并发、资源 | 连接保持策略、客户端、处理时长 |
| 典型来源 | 压测工具结果、访问日志统计 | ss、压测工具并发参数、监控面板 |
| 会不会持续累积 | 相对稳定 | 会波动、会堆积 |
关键点:两者由"响应时间"连接起来,不是一回事,也不能互相替代。 高并发不等于高 QPS,低并发也可能有高 QPS。
四、用 Little's Law 建立换算
用一个经典的排队论关系,能把这几个量串起来:
并发数(L)≈ QPS(λ)× 平均响应时间(W)
其中响应时间单位用秒。这个式子非常实用,能解释很多现象:
- 例子 1:服务器 QPS 1000,平均响应时间 50 毫秒(0.05 秒),那么需要的并发约为 1000 × 0.05 = 50 个。也就是说,这台机器只要同时有 50 个请求在飞,就能支撑 1000 QPS。
- 例子 2:如果响应时间涨到 200 毫秒,同样想撑 1000 QPS,需要并发 1000 × 0.2 = 200 个。响应变慢,同样的 QPS 需要更多并发。
- 例子 3:反过来,客户端只给 100 个并发,但响应时间只有 20 毫秒,理论 QPS 上限约 100 ÷ 0.02 = 5000。并发少也能有高 QPS,前提是处理够快。
这个式子的实战价值:压测时想达到某个 QPS,可以用它反推需要设置多少并发。 想测 5000 QPS、预估响应 20ms,就把并发设到约 100 起步再往上加。
五、压测中怎么分别测量
用 wrk 举例,一条命令同时能看到两个维度:
# -t 线程数,-c 并发连接数,-d 持续时长,--latency 输出延迟分布
wrk -t4 -c100 -d30s --latency http://127.0.0.1:8080/
输出里:
Running 30s test @ http://127.0.0.1:8080/
4 threads and 100 connections # 这里的 100 就是并发连接数 -c
Thread Stats Avg Stdev Max
Latency 12.34ms ... # 平均响应时间,换算 Little's Law 用它
Req/Sec 850.00 ... # 每线程每秒请求数
Requests/sec: 3200.00 # 这就是 QPS
- 并发数:
-c参数就是你设定的并发连接数。 - QPS:看
Requests/sec。 - 平均延迟:看
Latency的 Avg。 - 验证 Little's Law:
Requests/sec × Latency(秒) ≈ 并发。3200 × 0.01234 ≈ 39.5,接近但略小于 100,差值来自连接建立、等待等开销,属正常。
用 ab 也能看:
# -c 并发,-n 总请求数
ab -c 100 -n 100000 http://127.0.0.1:8080/
# 关注 Requests per second(QPS)和 Time per request(响应时间)
同时,服务端看连接占用:
# 看当前连接状态汇总(推荐)
ss -s
# 看监听端口上的连接数与状态分布
ss -tan | awk 'NR>1{print $1}' | sort | uniq -c
把客户端的并发设置、QPS 结果和服务端的连接数、CPU/内存一起看,才能判断瓶颈到底在哪。
六、几个最常见的误解
误解一:并发数等于 QPS。 完全错。并发 1000、响应 10ms,QPS 能到十万;响应 1 秒,QPS 只有 1000。两者差了倍数量级,取决于响应时间。
误解二:并发越高 QPS 越高。 不一定。并发加到某个点后,QPS 到顶甚至下降——因为资源饱和后,请求排队、响应变慢,反而拖低吞吐。存在最优并发点,超过就劣化。
误解三:连接数高就是压力大。 长连接空闲挂着,连接数很高但压力很小。要看活跃请求数,而不是 TCP 连接总数。
误解四:TPS 和 QPS 一样。 一个事务可能包含多个请求,两者口径不同,不能混用。谈指标时先说清单位定义。
误解五:只看 QPS 不看响应时间。 高 QPS 但响应时间飙到秒级,业务体验一样崩。要 QPS、响应时间(尤其 P95/P99)、错误率一起看。
七、从访问日志估算 QPS
没有压测工具时,分析线上访问日志也能估算 QPS,这是运维日常常用的一招。
# 统计一天的总请求数
wc -l /var/log/nginx/access.log
# 按秒统计请求数,取最忙的那一秒(近似峰值 QPS)
awk '{print $4}' /var/log/nginx/access.log \
| cut -d: -f1-3 | sort | uniq -c | sort -rn | head -5
# 统计每秒请求数分布(示例:统计出现的最大秒级请求数)
grep -o '\[[0-9]*/[A-Za-z]*/[0-9]*:[0-9:]*' /var/log/nginx/access.log \
| sort | uniq -c | sort -rn | head -5
判读要点:
- 平均秒级请求数 乘上业务时长,得到日均;最忙那一秒的请求数 近似峰值 QPS。两者之差就是峰值系数。
- 看日志统计出的峰值 QPS,和监控面板、压测结果对照,三者应该大致吻合,否则说明某一处的口径有问题。
- 日志里的高峰时段要和业务的用户行为对上,避免把爬虫、扫描流量误当成真实业务峰值。
把日志统计的 QPS 和同时段的连接数(ss -s)一起看,就能估算出当时的平均响应时间(用 Little's Law 反推),从而判断系统是"忙但快"还是"忙且慢"。
常见问题
Q1:怎样判断服务器该报"并发能力"还是"QPS"?
面向接入和容量,讲 QPS/吞吐;讲连接保持、长连接、WebSocket 场景,讲并发连接数。更严谨的做法是两个都报,并注明响应时间。
Q2:并发设多少才合适?
先用 Little's Law 估:目标 QPS × 预估响应时间。然后从小到大阶梯加压,观察 QPS 和响应时间,找到 QPS 接近峰值、响应时间还没明显劣化的点。
Q3:响应时间用什么口径算?
用平均响应时间做粗略估算,但决策要看 P95/P99。平均值会被少数快请求拉低,掩盖长尾慢请求。
Q4:QPS 和带宽有关系吗?
有。每个请求平均返回多少字节 × QPS 就是所需带宽。大响应体的接口,可能先撞带宽瓶颈。
Q5:为什么压测 QPS 上不去,但 CPU 也不高?
瓶颈可能不在 CPU,而在磁盘 IO、网络、连接数上限、下游依赖、锁竞争或压测机自身。要分层排查,不能只盯 CPU。
Q6:QPS 和并发数,容量规划时该按哪个定机器数量?
按峰值 QPS 定更直接:先算出业务峰值 QPS,再除以单机压测得到的稳定 QPS,得到机器数,最后叠加冗余。并发数是"验证和调参"用的中间量,用来反推压测参数、判断响应时间是否合理,一般不直接用来定机器数量。
总结
- QPS/TPS 是"速率",衡量每秒处理多少;并发连接数是"瞬时并存数",衡量同时有多少在处理,两者不是一回事。
- 关键公式:并发 ≈ QPS × 平均响应时间(Little's Law),用它既能解释现象,也能反推压测参数。
- 谈并发必须说清是 TCP 空闲长连接还是活跃请求,否则没有意义。
- 压测中:
-c是并发,Requests/sec是 QPS,Latency是响应时间,三者对照看,并用公式互相验证。 - 别只看 QPS,要结合响应时间(P95/P99)、错误率和资源使用;并发不是越高越好,存在最优值。
企业QQ咨询




