Web Server服务器压力测试的研究

记录一下自己的webserver在webbench下的测试。

1、首先用webbenchfork了1000个子进程模拟1000个客户端对服务器进行30s的并发请求,实验结果如下: QPS=8107,所有连接请求都得到了响应。

d86a4cbdcb3d4a15984edbde18d4dd5c.png

 

2、接着模拟3000个客户端并发30s,出现了1次failed,有一次连接请求没有得到响应。说明该种情况已经触摸到了服务器的瓶颈。

22ab4eb95fb94572a202130711491655.png

3、接着模拟3000个客户端并发180s,出现了1920次failed,有1920个连接请求没有得到响应。说明服务器在面对较长时间并发时性能下降。

d8bcd6374fdc49b180e7373f764dfb46.png

4、考虑到服务器的性能瓶颈可能是由于HPPT1.0无法建立HTTP长连接,导致每次请求都得经历TCP连接的三握四挥,极大地影响了服务器的处理能力,于是改用HTTP1.1进行同条件下的压测。

6ac74fcabf2a411d9e1a29a8747b0364.png

但webbench的http1.1的Connection字段默认为close而不是keep-alive没有开启长连接,而且因为1.1增加了许多字段,导致处理的每秒字节数大量提高,同时由于IO耗时增加,导致返回的pages数量下降,QPS下降到只有5500左右。

5、模拟5000clients资源不足,只能fork到4549个子进程。

265d885b3a554f589ace34dfdced934f.png

6、分析服务器性能瓶颈的原因:(1)服务器的设计框架是单Reactor+线程池模式,其中的Reactor所在的主线程负责监听并处理Accept和IO事件,线程池负责根据读事件的结果解析HTTP请求协议做出响应,通知主线程处理写事件。(2)webbench进行服务器压测的场景,包含了大量的Accept事件(短连接所致),同时每个Accept事件会伴随着一个读事件和一个写事件。

所以将这三个时间的处理放在主Reactor中,会造成服务器的性能瓶颈。为此计划将该服务器的设计模式改为主从Reactor模式+线程池,主Reactor只负责Accept,多个从Reactor负责处理读写事件。

修改代码中,修改完成打算进行压测。

 

 

参考文章:

muduo的性能测试引发的思考_muduo库的webbench测试-优快云博客

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值