天天看点

【转载】QPS、PV 、RT(响应时间)之间的关系

在进行系统性能压测和系统性能优化的时候,会涉及到qps,pv,rt相关的概念,本文总结一下qps,pv,rt之间的关系,放在博客备忘,本文参考了之前在淘宝工作时候的一些资料。

qps:单个进程每秒请求服务器的成功次数

qps = req/sec = 请求数/秒

qps统计方式 [一般使用 http_load 进行统计] 

qps = 总请求数 / ( 进程总数 * 请求时间 )

单台服务器每天pv计算:

公式1:每天总pv = qps * 3600 * 6

公式2:每天总pv = qps * 3600 * 8

服务器数量 = 每天总pv / 单台服务器每天总pv

峰值qps和机器计算公式:

原理:每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间 

峰值时间每秒请求数(qps):( 总pv数 * 80% ) / ( 每天秒数 * 20% )

峰值机器数量:峰值时间qps / 单台机器的qps

例子:

问:每天300w pv 的在单台机器上,这台机器需要多少qps?

答:( 3000000 * 0.8 ) / (86400 * 0.2 ) = 139 (qps)

问:如果一台机器的qps是58,需要几台机器来支持? 答:139 / 58 = 3

性能压测的情况下,起初随着用户数的增加,qps会上升,当到了一定的阀值之后,用户数量增加qps并不会增加,或者增加不明显,同时请求的响应时间却大幅增加。这个阀值我们认为是最佳线程数。

为什么要找最佳线程数

过多的线程只会造成,更多的内存开销,更多的cpu开销,但是对提升qps确毫无帮助

找到最佳线程数后通过简单的设置,可以让web系统更加稳定,得到最高,最稳定的qps输出

最佳线程数的获取:

通过用户慢慢递增来进行性能压测,观察qps,响应时间

根据公式计算:服务器端最佳线程数量=((线程等待时间+线程cpu时间)/线程cpu时间) * cpu数量

单用户压测,查看cpu的消耗,然后直接乘以百分比,再进行压测,一般这个值的附近应该就是最佳线程数量。

影响最佳线程数的主要因素:

io

io开销较多的应用其cpu线程等待时间会比较长,所以线程数量可以开的多一些,相反则线程数量要少一些,其实有两种极端,纯io的应用,比如proxy,则线程数量可以开到非常大(实在太大了则需要考虑线程切换的开销),这种应用基本上后端(比如这个proxy是代理搜索的)的qps能有多少,proxy就有多少。

cpu

对于耗cpu的计算,这种情况一般来讲只能开到cpu个数的线程数量。但是并不是说这种应用的qps就不高,往往这种应用的qps可以很高,因为耗cpu计算的应用,往往处理单次请求的时间会很短。

在最佳线程数量之前,qps和线程是互相递增的关系,线程数量到了最佳线程之后,qps持平,不在上升,甚至略有下降,同时响应时间持续上升。

同一个系统而言,最佳线程数越多,qps越高

继续阅读