有人说PHP性能低?go语言性能高?到底谁高谁低数据说话!我们就来实际对比一下各PHP框架及一款go语言框架的性能是怎样的。

硬件: CPU:Intel(R) Xeon(R) CPU E5-2689 0 @ 2.60GHz 16核心。内存:16GB。

操作系统:Ubuntu 18.04

PHP版本:7.4

压力测试命令: ab -n 100000 -c 1000 -k $url

PHP框架最新输出hello world压力测试结果:

框架 版本 方式 web服务器 RPS 最高日/PV
laravel 8.x web nginx 1000  8640w
symfony 4.4 web nginx 2300  1.98亿
symfony 4.4 api nginx 4800  4.14亿
CI 4.0 web nginx 4800  4.14亿
thinkphp 6.0 web nginx 2400  2.0亿
lumen 7.2 api nginx 5500  4.75亿
ubiquity 2.3 web nginx 6400  5.52亿
phalcon 3.4.4 nginx
webman 1.0 web php-cli 30000  25.9亿
mixphp 2.2 web php-cli 44000  38亿
go-zero 1.1.1 api go语言 25000  21.6亿

*mixphp为基于swoole 4.5的框架,开启多核与端口复用(并不是核心越多性能越高,以上开了4核)

PHP框架最新模板渲染输出hello world压力测试结果:

框架 版本 方式 web服务器 RPS 最高日/PV
laravel 8.x web  nginx 1000  8640w
symfony 4.4 web  nginx 2200  1.9亿
CI 4.0 web  nginx 4700  4亿
thinkphp 6.0 web  nginx 2300  1.98亿
lumen 7.2 api  nginx 4600  3.9亿
ubiquity 2.3 web  nginx 6400  5.52亿
phalcon 3.4.4  nginx
webman 1.0 web php-cli 31000  26.7亿
mixphp  2.2 web php-cli 25000  21.6亿

 

PHP框架最新读取mysql 5.7数据库压力测试结果:

框架 版本 方式 web服务器 RPS 最高日/PV 说明
laravel 8.x web nginx 700  6048w  DB::table()->get()
symfony 4.4 web nginx 1300  1.1亿
symfony 5.2 api nginx 1900  1.64亿
CI 4.0 web nginx 2900  2.5亿
thinkphp 6.0 web nginx 1500  1.29亿
lumen 7.2 api nginx 2500  2.16亿
ubiquity 2.3 web nginx 5600  4.8亿
phalcon 3.4.4 nginx
webman 1.0 web php-cli 31000  26.7亿
mixphp  2.2 web php-cli 25000  21.6亿

*从mysql数据库的用户表,读取约10个用户名后,循环输出(不经过模板渲染)。

*ubiquity:如果用了php7.4 preloading 有性能高达50-60%的性能提升.

*laravel 8.x 优化后测试达到1200RPS。

附图:

说明:

0.以上各框架都为下载框架后,按各框架默认安装方式安装好,同时关闭debug模式,无其它性能优化情况下进行测试,同时关闭nginx的 access log。
1.为了测试准确,laravel 的SESSION_DRIVER不要设置为file,这里设置为array,否则会由于大量磁盘IO会造成结果比较低。
2.Mysql的连接数要设置足够大,不然会出错完不成压力测试。
3.如果由于高并发出现php-fpm错误:connect() to unix:/var/run/php-fpm.sock failed (11: Resource temporarily unavailable),请修改参数:
1)内核修改
sudo vim /etc/sysctl.conf
net.ipv4.tcp_max_syn_backlog = 4096
net.core.netdev_max_backlog = 4096
sudo sysctl -p生效
2)php-fpm配置修改
修改 /etc/php/7.4/fpm/pool.d/www.conf
listen.backlog = 4096
sudo service php-fpm7.4 restart
4.日最高PV,为RPSx86400(一天的秒数),为可能达到的日最高页面浏览量.当然由于网民一般在夜里的浏览量比较低,实际的PV,是小于这个数的,根据百度统计的用户上网时间分布,得出的实际PV应该是日最高PVx0.72,当然百度统计是全网网站的平均值,根据网站类型不同,有些网站的实际日PV可能是日最高PV/2或日最高PV/3。
5.此测试结果保证严谨,此压力测试前前后后大约一年内时间经历了好几轮测试,此为2021最新版本结果。每个框架的结果误差大约在100以内。

2021.2.18更新:因为ap工具只支持http/1.0,不支持http/1.1,所以 如果响应头中有Transfer-Encoding: chunked 的,则ab不会启用keep-alive 连接,所以会造成测试数据比较低。如上图中的,没有keep-alilve数据的,可能不准确。而用Content-Length头,则可以以keep-alive连接。可以换为wrk测试工具进行测试。待以后数据更新。

 

结论:

go的框架没有比过php框架。

ubiquity:(https://ubiquity.kobject.net/) ,做为一个纯PHP框架,目前是传统PHP框架中性能最高的。

webman(https://www.workerman.net/doc/webman),mixphp(swoole)框架为cli模式,因为是长驻内存,所以性能最高,并在hello world测试中超过了go语言的go-zero框架。

如果你用的是laravel技术栈,那么在做接口时,强烈建议用laravel的微框架lumen,除具有非常高的性能外,还具有laravel的大部分功能,并且可以极容易升级到laravel框架。

ps:https://github.com/lizhichao/one (此框架性能也很高。)

最后更新时间:2021.01.26

原创文章,转载请注明:来自Lenix的博客,地址https://blog.p2hp.com/archives/6906

 

最后更新于 2021年2月18日

PHP框架最新性能压力测试比较
标签: