飘易博客(作者:Flymorn)
订阅《飘易博客》RSS,第一时间查看最新文章!
飘易首页 | 留言本 | 关于我 | 订阅Feed

原生PHP、Laravel、MIXPHP、Go高并发性能测试QPS

Author:飘易 Source:飘易
Categories:Linux技术 PostTime:2018-4-28 15:03:12
正 文:

系统环境:

4核8G 内存,SSD硬盘

CentOS 6.5 64

 

MySQL 5.6.29

PHP 5.6.22

Apache 2.2.31

nginx 1.10.0

启用OPcache


web架构为:

把php请求利用Nginx反向代理给后端的Apache或者MIXPHP。

测试之前,请先查看apache的ab测试注意点:http://www.piaoyi.org/linux/Apache-ab-test.html


一、基准性能测试

1000并发,1万请求数:

ab -n10000 -c1000 {URL}

1、Nginx静态文件

Nginx QPS: 14040/


暴力测试1.9万并发,19万请求(再高的并发服务就不稳定了):

没有失败请求,QPS: 10918/


2、原生PHP

PHP QPS 3246/

 

暴力测试 3000并发,3万请求:

QPS  507/

并发再高的话,失败请求就逐渐多了起来,服务不可用了。


3、MIXPHP

基于 Swoole 的常驻内存型 PHP 高性能框架测试。

环境 swoole 1.10.4 mixphp 1.0.2

采用Nginxphp请求反向代理给mixphphttp://127.0.0.1:9501


QPS  6455/

 

暴力测试:

1.6万并发,16万请求数(再高的并发出错的请求就逐渐多了)

QPS  4020/

此时系统负载2CPU 40%


4、Go语言

GO QPS17489/

 

暴力测试2万并发,20万请求:

2万并发的请求下,没有失败请求,QPS 9053/秒。


基准测试由于不连接数据库,一般不用于实际项目业务场景的测试使用,仅供参考而已。


基准测试(不操作数据库)总结:


常规性能测试对比

ab并发和请求数框架或语言QPS(每秒请求数)
1000并发,10000请求Nginx14040
1000并发,10000请求原生PHP3246
1000并发,10000请求MIXPHP6455
1000并发,10000请求Go语言
17489


暴力性能测试对比

ab并发和请求数框架或语言QPS(每秒请求数)
19000并发,190000请求Nginx10918
3000并发,30000请求原生PHP507
16000并发,160000请求MIXPHP4020
20000并发,200000请求Go语言
9053



二、读取数据库的性能测试

连接mysql数据库,只读取数据表中一行记录:


测试之前,先把mysql的并发连接数提高,my.cnf里面:

[mysqld]

thread_cache_size = 256

max_connections = 10000 

否则在高并发时,mysql就会报错:

Error 1040: Too many connections


1、原生PHP

php QPS 1735/

 

暴力测试

2000并发,2万请求(再高的并发失败请求就逐渐多了起来)

QPS 641/


2、Laravel5.1框架QPS测试

laravel框架测试的注意点:

1、由于框架加载太多依赖,并发10001万请求时已经产生3000多个失败请求,所以需要降低测试要求;

2、对于laravel框架来说,需要给ab加上 -k 参数进行测试,否则会出现错误:apr_poll: The timeout specified has expired (70007)

测试命令:

ab -k -c350 -n3500 http://la.dev/

并发3503500请求数:

QPS  58/

 

laravel进行性能调优:

APP_DEBUG=false
php artisan config:cache
php artisan route:cache
php artisan optimize --force

 

性能调优后,QPS上升到 118/

比未调优之前提高50%

此时系统负载150cpu 50%,高负荷运转。


3、MIXPHP框架(PDO短链接)

QPS  2935/

 

mixphp暴力测试

1.5万并发,15万请求数(再高的并发就不稳定啦)

QPS  2422/

此时系统负载6-8cpu 60%,在高并发的场景下,QPS下降并不明显。


4、MIXPHP框架(PDO长链接)


QPS  4367/

长链接比短链接并发性能提高 50%

 

mixphp长链接暴力测试

1.5万并发,15万请求

QPS 3098/

此时系统负载6-8cpu 60%,在高并发的场景下,QPS下降并不明显。


5、Go语言


go QPS 4247/

 

go暴力测试,并发1.8万,请求18万:

ab -n 180000 -c 18000 http://localhost:9090/hello

在如此高的并发下,没有失败的请求,QPS依然达到了3037/秒;

服务器负载load average 平均5-10cpu50%

再测试比1.8万高的并发,abFailed requests就逐渐多起来了(ab最多支持2万并发),原因是mysql数据库撑不住了,mysql报错:“dial tcp 127.0.0.1:3306: connect: connection timed out

go不愧为天生的高并发王者!



测试总结:

常规性能测试对比

ab并发和请求数框架或语言QPS(每秒请求数)
1000并发,10000请求原生PHP
1735
350并发,3500请求Laravel 5.1(开发模式)58
350并发,3500请求Laravel 5.1(生产模式)118
1000并发,10000请求MIXPHP(短链接)2935
1000并发,10000请求MIXPHP(长链接)4367
1000并发,10000请求Go语言
4247


暴力性能测试对比

ab并发和请求数框架或语言QPS(每秒请求数)
2000并发,20000请求原生PHP
641
15000并发,150000请求MIXPHP(短链接)2422
15000并发,150000请求MIXPHP(长链接)3098
18000并发,180000请求Go语言
3037


完。

作者:飘易
来源:飘易
版权所有。转载时必须以链接形式注明作者和原始出处及本声明。
上一篇:vim命令常用方法
下一篇:Apache的ab进行并发性能测试的注意点
1条评论 “原生PHP、Laravel、MIXPHP、Go高并发性能测试QPS”
1 JackMa
2019-4-17 16:11:15
very good!
发表评论
名称(*必填)
邮件(选填)
网站(选填)

记住我,下次回复时不用重新输入个人信息
© 2007-2019 飘易博客 Www.Piaoyi.Org 原创文章版权由飘易所有