swoole-http-server(swoft)和 nginx + php-fpm(Laravel 5.5)HTTP 压力测试性能对比
两个请求地址同样输出(直接输出,不涉及io和计算)
public function test()
{
return ['getUser',1];
}
["getUser",1]
1.先来看看 nginx + php-fpm
ab -c 10 -n 100 http://127.0.0.1:8080/test
2.再来看看 swoole-http-server
ab -c 10 -n 100 http://127.0.0.1:8501/user/1
nginx + php-fpm |
swoole-http-server |
|
Time taken for tests 请求处理完成花费的总时间 |
7.211 seconds |
0.926 seconds |
Complete requests 总请求数 |
100 | 100 |
Failed requests 失败的请求数 |
40 | 0 |
Requests per second 吞吐率 |
13.87 [#/sec] | 108.03 [#/sec] |
Time per request 用户平均请求等待时间 |
721.137 [ms] | 92.569 [ms] |
Time per request 服务器平均请求处理时间 |
72.114 [ms] |
9.257 [ms] |
Transfer rate | 63.64 [Kbytes/sec] received | 21.42 [Kbytes/sec] received |
3.主要看三个数据
Requests per second:吞吐率
服务器并发处理能力的量化描述,单位是reqs/s,指的是某个并发用户数下单位时间内处理的请求数。某个并发用户数下单位时间内能处理的最大请求数,称之为最大吞吐率。
计算公式:总请求数 / 处理完成这些请求数所花费的时间,即
Request per second = Complete requests / Time taken for tests
Time per request:上面的是用户平均请求等待时间
处理完成所有请求数所花费的时间/ (总请求数 / 并发用户数),即
Time per request = Time taken for tests /( Complete requests / Concurrency Level)
Time per request:下面的是服务器平均请求处理时间
处理完成所有请求数所花费的时间 / 总请求数,即
Time taken for / testsComplete requests
可以看到,它是吞吐率的倒数。
同时,它也=用户平均请求等待时间/并发用户数,即
Time per request / Concurrency Level
4.通过对比 常驻内存的机制(包括其他的一些机制)在性能提升上面,真的是不止一点点(尤其在高并发场景下)。