6.5.3 muduo 与Nginx 的吞吐量对比(2)
客户端运行以下命令来获取/hello 的内容,服务端返回字符串"hello, world!"。
- ./ab -n 100000 -k -r -c 1000 10.0.0.9:8080/hello
先测试单线程的性能(见图6-8),横轴是并发连接数,纵轴为每秒完成的HTTP请求响应数目,下同。在测试期间,ab 的CPU 使用率低于70%,客户端游刃有余。
|
| (点击查看大图)图6-8 |
再对比muduo 4 线程和Nginx 4 工作进程的性能(见图6-9)。当连接数大于20时,top(1) 显示ab 的CPU 使用率达到85%,已经饱和,因此换用weighttp (双线程)来完成其余测试。
|
| (点击查看大图)图6-9 |
CPU 使用率对比(百分比是top(1) 显示的数值):
10 000 并发连接,4 workers/threads,muduo 是4 83%,Nginx 是4 75%
1000 并发连接,4 workers/threads,muduo 是4 85%,Nginx 是4 78%
初看起来Nginx 的CPU 使用率略低,但是实际上二者都已经把CPU 资源耗尽了。与CPU benchmark 不同,涉及IO 的benchmark 在满负载下的CPU 使用率不会达到100%,因为内核要占用一部分时间处理IO。这里的数值差异说明muduo 和Nginx 在满负荷的情况下,用户态和内核态的比重略有区别。
测试结果显示muduo 多数情况下略快,Nginx 和muduo 在合适的条件下qps(每秒请求数)都能超过10 万。值得说明的是,muduo 没有实现完整的HTTP 服务器,而只是实现了满足最基本要求的HTTP 协议,因此这个测试结果并不是说明muduo 比Nginx 更适合用做httpd,而是说明muduo 在性能方面没有犯低级错误。