一、qps,每秒查询
qps:queries per second意思是“每秒查询率”,是一台服务器每秒能够相应的查询次数,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。互联网中,作为域名系统服务器的机器的性能经常用每秒查询率来衡量。
二、tps,每秒事务
tps:是transactionspersecond的缩写,也就是事务数/秒。它是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请求时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数。qps vs tps:qps基本类似于tps,但是不同的是,对于一个页面的一次访问,形成一个tps;但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入“qps”之中。如,访问一个页面会请求服务器2次,一次访问,产生一个“t”,产生2个“q”。
三、rt,响应时间
响应时间:执行一个请求从开始到最后收到响应数据所花费的总体时间,即从客户端发起请求到收到服务器响应结果的时间。响应时间rt(response-time),是一个系统最重要的指标之一,它的数值大小直接反应了系统的快慢。
四、并发数
并发数是指系统同时能处理的请求数量,这个也是反应了系统的负载能力。
五、吞吐量
系统的吞吐量(承压能力)与request对cpu的消耗、外部接口、io等等紧密关联。单个request 对cpu消耗越高,外部系统接口、io速度越慢,系统吞吐能力越低,反之越高。系统吞吐量几个重要参数:qps(tps)、并发数、响应时间。
qps(tps):(query per second)每秒钟request/事务 数量并发数: 系统同时处理的request/事务数响应时间: 一般取平均响应时间
理解了上面三个要素的意义之后,就能推算出它们之间的关系:
qps(tps)= 并发数/平均响应时间并发数 = qps*平均响应时间
六、实际举例
我们通过一个实例来把上面几个概念串起来理解。按二八定律来看,如果每天 80% 的访问集中在 20% 的时间里,这 20% 时间就叫做峰值时间。
公式:( 总pv数 * 80% ) / ( 每天秒数 * 20% ) = 峰值时间每秒请求数(qps)机器:峰值时间每秒qps / 单台机器的qps = 需要的机器
1、每天300w pv 的在单台机器上,这台机器需要多少qps?
( 3000000 * 0.8 ) / (86400 * 0.2 ) = 139 (qps)
2、如果一台机器的qps是58,需要几台机器来支持?
139 / 58 = 3
七、最佳线程数、qps、rt
1、单线程qps公式:qps=1000ms/rt
对同一个系统而言,支持的线程数越多,qps越高。假设一个rt是80ms,则可以很容易的计算出qps,qps = 1000/80 = 12.5
多线程场景,如果把服务端的线程数提升到2,那么整个系统的qps则为 2*(1000/80) = 25, 可见qps随着线程的增加而线性增长,那qps上不去就加线程呗,听起来很有道理,公司也说的通,但是往往现实并非如此。
2、qps和rt的真实关系
我们想象的qps、rt关系如下

实际的qps、rt关系如下

3、最佳线程数量
刚好消耗完服务器的瓶颈资源的临界线程数,公式如下
最佳线程数量=((线程等待时间+线程cpu时间)/线程cpu时间)* cpu数量
特性:
在达到最佳线程数的时候,线程数量继续递增,则qps不变,而响应时间变长,持续递增线程数量,则qps开始下降。每个系统都有其最佳线程数量,但是不同状态下,最佳线程数量是会变化的。瓶颈资源可以是cpu,可以是内存,可以是锁资源,io资源:超过最佳线程数-导致资源的竞争,超过最佳线程数-响应时间递增。
八、判断“正常”的核心标准
不是看 qps 数字本身,而是看:
- 业务量匹配:峰值 qps 是否和预期一致
- 容量水位:峰值 qps < 压测容量的 50%~70%
- 延迟:p95/p99 在 sla 内,比如 100ms、500ms
- 错误率:一般 <0.1% 很好,<1% 可接受
- 资源:cpu <70%、内存稳定、连接池不爆、gc 正常、无队列积压
- 突增突降:qps 突然暴涨可能是攻击/重试,突然归零可能是故障
九、常见粗略参考范围
| 场景 | 常见/正常 qps 参考 |
|---|---|
| 个人博客、后台管理 | 10 ~ 500 |
| 中小企业 web/api | 100 ~ 5000 |
| 普通 java/tomcat 单机 api | 500 ~ 3000,优化后 5000~10000 |
| go/node 单机 api | 2000 ~ 20000 |
| nginx 静态/网关单机 | 几万 ~ 几十万 |
| redis 单实例 | 5万 ~ 10万+ |
| mysql 简单主键查询 | 几千 ~ 几万 |
| mysql 复杂查询/事务 | 几百 ~ 几千 |
| kafka 单机 | 几万 ~ 几十万 msg/s |
| elasticsearch 查询 | 几十 ~ 几千,取决于复杂度 |
这些数字只是经验值,不同硬件和接口差异极大。
十、怎么估算自己的正常 qps
公式:
- 平均 qps = 日请求量 / 86400
- 峰值 qps ≈ 平均 qps × 3 ~ 10
- 按二八原则:峰值 ≈ 日请求量 / 21600,约等于平均 qps 的 4 倍
例如:
| 日请求量 | 平均 qps | 峰值 qps 约 |
|---|---|---|
| 100 万 | 12 | 50 |
| 1000 万 | 116 | 460 |
| 1 亿 | 1157 | 4600 |
结论
对普通业务系统来说,单机 api 500~2000 qps 通常算正常且不错;优化好的服务可到 5000~10000+。但真正判断标准是:
系统稳定、延迟达标、错误率低、资源不瓶颈、能扛住业务峰值,就是正常。
发表评论