怎样获得更高的性能?
1. 运行环境
WSL2 Ubuntu20 php8 + mysql8
1). 当前使用的 Laravel 版本?
laravel9.17 + Octane
2). 当前使用的 php/php-fpm 版本?
PHP 版本:php8
php-fpm 版本:php8
3). 当前系统
Windows10 + wsl2
4). 业务环境
)
开发环境
5). 相关软件版本
ab mysql8
2. 问题描述?
最近做了一个系统,用户才1000多个4核8G的服务器就直接崩溃了。拿ab工具跑了了一下,部分接口支撑不了20个并发。
自己就在本地重复试了一下。本地配置是CPUi7-10700F内存64G硬盘SSD的,系统是window10+wsl2(Ubuntu20),php8.0+mysql8.0,golang1.18.2。
使用了以下几个框架:
1.原生php+pdo的方法查询users表id等于2的数据用json返回
2.thinkphp的Db方法查询users表id等于2的数据用json返回
3.laravel的User模型方法查询users表id等于2的数据用json返回
4.laravel+Octane使用User模型方法查询users表id等于2的数据用json返回
5.gin+gorm查询users表id等于2的数据用json返回
6.swoole连接池的方式查询users表id等于2的数据用json返回
测试的结果1234都没办法达到100个并发,原生php+pdo的方法提示连接过多,把数据库的max_connections调到10000也不行,大约能支撑到80左右,接口响应速度倒是一直在30ms以下。2、3、4接口响应都是十几秒。然而,测试gin+gorm竟然可以达到1000的并发,差别十倍之多。使用swoole连接池虽然可以接近1000并发,但是也没到,连接池释放不及时,容易崩溃。
我想问的是并发差别如此之大(朋友说gorm有查询结果缓存,我查了一下文档,没找到),laravel的性能瓶颈在什么地方,自动加载、路由、配置已优化过,还有什么地方可以提升吗?隐约感觉瓶颈在数据库,有什么办法优化?大家一般的laravel程序4核8G的云服务器能支撑多少的并发量?
堆机器
go协程针对堵塞操作还是有效果的
无论是laravel还是加上octane,本质上还是阻塞查询,只是提前把文件加载到内存里面了,无法加速数据库查询,可以尝试swoole先关框架hyperf或者swoft,或者直接上gin