原生PHPLaravelMIXPHPGo高并发性能测试QPS

Posted 十年砍柴---小火苗

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了原生PHPLaravelMIXPHPGo高并发性能测试QPS相关的知识,希望对你有一定的参考价值。

系统环境:

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测试注意点:Apache的ab进行并发性能测试的注意点

一、基准性能测试

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

采用Nginx将php请求反向代理给mixphp:http://127.0.0.1:9501

QPS : 6455/秒

暴力测试:

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

QPS : 4020/秒

此时系统负载2,CPU 40%

4、Go语言

GO QPS:17489/秒

暴力测试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、由于框架加载太多依赖,并发1000,1万请求时已经产生3000多个失败请求,所以需要降低测试要求;

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

测试命令:

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

并发350,3500请求数:

QPS : 58/秒

对laravel进行性能调优:

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

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

比未调优之前提高50%。

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

3、MIXPHP框架(PDO短链接)

QPS : 2935/秒

mixphp暴力测试

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

QPS : 2422/秒

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

4、MIXPHP框架(PDO长链接)

QPS : 4367/秒

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

mixphp长链接暴力测试

1.5万并发,15万请求

QPS :3098/秒

此时系统负载6-8,cpu 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-10,cpu约50%。

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

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

测试总结:

常规性能测试对比

ab并发和请求数框架或语言QPS(每秒请求数)
1000并发,10000请求原生PHP1735
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请求原生PHP641
15000并发,150000请求MIXPHP(短链接)2422
15000并发,150000请求MIXPHP(长链接)3098
18000并发,180000请求Go语言3037

完。

以上是关于原生PHPLaravelMIXPHPGo高并发性能测试QPS的主要内容,如果未能解决你的问题,请参考以下文章

1.Go语言高并发与微服务实战 --- 云原生架构

1.Go语言高并发与微服务实战 --- 云原生架构

如何利用Java开发高性能高并发Web应用.ppt

高性能高并发网站架构,教你搭建Redis5缓存集群

高并发高并发环境下如何优化Tomcat性能?看完我懂了!

成为架构师课程系列高并发系统设计的三大目标:高性能高可用可扩展