记录一下自己的webserver在webbench下的测试。
1、首先用webbenchfork了1000个子进程模拟1000个客户端对服务器进行30s的并发请求,实验结果如下: QPS=8107,所有连接请求都得到了响应。
2、接着模拟3000个客户端并发30s,出现了1次failed,有一次连接请求没有得到响应。说明该种情况已经触摸到了服务器的瓶颈。
3、接着模拟3000个客户端并发180s,出现了1920次failed,有1920个连接请求没有得到响应。说明服务器在面对较长时间并发时性能下降。
4、考虑到服务器的性能瓶颈可能是由于HPPT1.0无法建立HTTP长连接,导致每次请求都得经历TCP连接的三握四挥,极大地影响了服务器的处理能力,于是改用HTTP1.1进行同条件下的压测。
但webbench的http1.1的Connection字段默认为close而不是keep-alive没有开启长连接,而且因为1.1增加了许多字段,导致处理的每秒字节数大量提高,同时由于IO耗时增加,导致返回的pages数量下降,QPS下降到只有5500左右。
5、模拟5000clients资源不足,只能fork到4549个子进程。
6、分析服务器性能瓶颈的原因:(1)服务器的设计框架是单Reactor+线程池模式,其中的Reactor所在的主线程负责监听并处理Accept和IO事件,线程池负责根据读事件的结果解析HTTP请求协议做出响应,通知主线程处理写事件。(2)webbench进行服务器压测的场景,包含了大量的Accept事件(短连接所致),同时每个Accept事件会伴随着一个读事件和一个写事件。
所以将这三个时间的处理放在主Reactor中,会造成服务器的性能瓶颈。为此计划将该服务器的设计模式改为主从Reactor模式+线程池,主Reactor只负责Accept,多个从Reactor负责处理读写事件。
修改代码中,修改完成打算进行压测。
参考文章: