服务端并发和客户端并发不是同一个概念。客户端并发仅仅是为了模拟多用户访问,服务端并发是同时处理的请求数。从收到客户端的请求到处理完成发出响应,都是属于并发执行的请求。
客户端并发数不等于服务端并发数。虽然服务端同一时刻执行的线程数等于cpu个数,但是高性能的服务一般是都会使用了异步io;遇到io操作就扔给了操作系统执行,cpu接着干其他的事。所以应用程序同时可以处理多于cpu数目很多的请求。但也不是无限多的。影响并发的系统资源有socket数,带宽紧张程度,内存紧张程度,cpu繁忙程度,磁盘繁忙程度。这些资源共同影响并发数。
这些资源中有些非常充足比如socket数(普通的服务都是设置了600000, 通过ulimit -n查看),有些就比较匮乏,比如磁盘(具体效率可以去google)。当磁盘遇到瓶颈的时候,socket资源充当了缓冲区。虽然同时能够接受很多请求,但是真正能做出响应的比较少,造成响应时间增加,这种并发没有意义。
所以,能保证最低响应时间的并发才是有效并发。
我们在压力测试过程中,不断的增加并发数,如果平均响应时间增加,说明并发能力已经到瓶颈了。
上面已经谈及到,并发数可通过多次实验来获得。
下面在来介绍一个种估算并发数据方法:
并发估算法
摘自:
从压测工具谈并发、压力、吞吐量
Method for Estimating the Number of Concurrent Users
QPS=请求总量/请求时间总量
QPS=并发数/平均响应时间
摘自:
从压测工具谈并发、压力、吞吐量
hey
siege
vegeta
wrk
ab