并发数
并发数是指系统同时能处理的请求数量,这个也是反应了系统的负载能力
服务端的并发数不可能无限大,机器的上限是固定的。并发量到达一定的数值,响应时间变得越来越高,qps越来越低。**
吞吐量
吞吐量是指单位时间内系统能处理的请求数量,体现系统处理请求的能力,这是目前最常用的性能测试指标
响应时间RT(Response-time)
响应时间是一个系统最重要的指标之一,它的数值大小直接反应了系统的快慢。响应时间是指执行一个请求从开始到最后收到响应数据所花费的总体时间,即从客户端发起请求到收到服务器响应结果的时间
QPS
QPS即每秒查询率,是对一个特定的查询服务器在规定时间内所处理流量多少的衡量标准。
每秒查询率
因特网上,经常用每秒查询率来衡量域名系统服务器的机器的性能,即为QPS。
对应fetches/sec,即每秒的响应请求数,也即是最大吞吐能力。
qps和tps的关系就在于qps是服务器的处理请求的能力,tps是服务器处理事务的能力,一个事物可能包含多个接口,但是也可能一个接口,所以当这个事物仅有一个接口时,那么tps相当于qps。
计算关系:
QPS = 并发量 / 平均响应时间
并发量 = QPS * 平均响应时间
估算
那我们怎么估出每秒钟能处理多少请求呢?
- 自己在接口里记录
```java
@RestController
@RequestMapping(“/home”)
public class IndexController {
//省略
@RequestMapping(“/index”)
String index() {
} }logger.info("QPS记录");
return "index";
//具有唯一性的字符串呢,所谓唯一性,指的是”QPS记录”这个字符串,在这个接口的一次调用流程中,只出现一次!如果出现两次,就会导致到时候统计出来的次数会多一倍,所以尽量选择具有唯一性的字段!
- 利用tomcat的access log
server.tomcat.accesslog.directory 设定log的目录,默认: logs server.tomcat.accesslog.enabled 是否开启access log,默认: false ```
- 根据数据库数据变动量估计 (数据库数据变动量可以看做TPS,再乘以页面上的请求接口有几个可以估算出来)
TPS
也就是事物数/秒。它是软件测试结果的测量单位。一个事务是指一个客户机向服务器发送请求然后服务器做出反应的过程。客户机在发送请时开始计时,收到服务器响应后结束计时,以此来计算使用的时间和完成的事务个数
Qps基本类似于Tps,但是不同的是,对于一个页面的一次访问,形成一个Tps;但一次页面请求,可能产生多次对服务器的请求,服务器对这些请求,就可计入“Qps”之中
例:访问一个页面会请求服务器3次,一次放,产生一个“T”,产生3个“Q”PV(Page View)
即每个页面的浏览次数,用户每次刷新就算一次。UV(UniqueVisitor)
独立访客数,每天访问的用户数,此数据需要根据用户唯一标识进行去重。举个例子
举个例子来理解下上述几个概念。
假设每天80%的访问集中在20%的时间里,这20%时间叫做峰值时间
公式:( 总PV数 80% ) / ( 每天秒数 20% ) = 峰值时间每秒请求数(QPS)
机器:峰值时间每秒QPS / 单台机器的QPS = 需要的机器
每天300w PV 的在单台机器上,这台机器需要多少QPS?
( 3000000 0.8 ) / (86400 0.2 ) = 139 (QPS)
如果一台机器的QPS是58,需要几台机器来支持?
139 / 58 = 3
单线程QPS公式,QPS=1000ms/RT,对同一个系统而言,支持的线程数越多,QPS越高。假设一个RT是80ms,则可以很容易的计算出QPS,QPS = 1000/80 = 12.5
多线程场景,如果把服务端的线程数提升到2,那么整个系统的QPS则为 2(1000/80) = 25, 可见QPS随着线程的增加而线性增长,那QPS上不去就加线程呗,听起来很有道理,公司也说的通,但是往往现实并非如此。
最佳线程数量
刚好消耗完服务器的瓶颈资源的临界线程数,公式如下
最佳线程数量=((线程等待时间+线程cpu时间)/线程cpu时间) cpu数量
特性:
1.在达到最佳线程数的时候,线程数量继续递增,则QPS不变,而响应时间变长,持续递增线程数量,则QPS开始下降
2.每个系统都有其最佳线程数量,但是不同状态下,最佳线程数量是会变化的
3.瓶颈资源可以是CPU,可以是内存,可以是锁资源,IO资源
超过最佳线程数-导致资源的竞争
超过最佳线程数-响应时间递增