宝塔环境下的laravel项目,接口响应都是几秒,有什么优化方案?
我有两个环境
第一个环境是开发环境,配置是2核4G、内存16G、5M带宽
第二个环境是正式环境,配置是4核8G,内存16G、5M带宽
两个的环境部署一模一样,都是用宝塔,以及nginx、php的配置都一样,这个我并没有去验证,刚来公司不久,技术经理给说的我也简单的看过一些phpfpm配置,以及nginx的配置,应该是一样,mysql都是云服务
问题:dev环境的接口几乎都是2秒左右、有时候会达到六七秒左右,正式环境很快,基本最大不超过1秒,以下是具体的问题细节,大家可以看看我的排查思路
排查思路
{"time":"2024-09-14 11:38:50.821171","request_id":"d6efa2e19c41d90a847ffb6e8ce8395b47272","total_time":"4.787","sapi":"CGI","app_id":"Laravel","env":"develop","level":"INFO","message":"当前请求:","context":{"controller":"BasicDataController","method":"listCategory","params":{"page":"1","page_size":"200","level_id":"405","cate_name":null},"mark":"","log":false}}
{"time":"2024-09-14 11:38:50.858988","request_id":"d6efa2e19c41d90a847ffb6e8ce8395b47272","total_time":"4.825","sapi":"CGI","app_id":"Laravel","env":"develop","level":"INFO","message":"SQL: select count(*) as aggregate from `category_list` where `level_id` = '405' [ Run Time: 35.9ms ]","context":[]}
{"time":"2024-09-14 11:38:50.867082","request_id":"d6efa2e19c41d90a847ffb6e8ce8395b47272","total_time":"4.833","sapi":"CGI","app_id":"Laravel","env":"develop","level":"INFO","message":"SQL: select * from `category_list` where `level_id` = '405' order by `id` desc limit 200 offset 0 [ Run Time: 7.65ms ]","context":[]}
{"time":"2024-09-14 11:38:50.875554","request_id":"d6efa2e19c41d90a847ffb6e8ce8395b47272","total_time":"4.841","sapi":"CGI","app_id":"Laravel","env":"develop","level":"INFO","message":"SQL: select `name`, `id` from `user` where `id` in ('400', '377', '379') [ Run Time: 6.71ms ]","context":[]}
total_time是断点时间,第一条是全局中间件中打印的路由请求日志,也就是说程序走到中间件已经执行了4.787,本次执行就只实行了日志中的sql查询,总共下来到最后一条日志的时候,跑了4.841秒,所以业务并不算复杂

这是页面上http请求时间,慢了很多都是七八秒,快了也就是一两秒,实际这些接口中并没有复杂的sql以及业务,数据库的数据最多的也就是几千

这个是宝塔的访问限制,也没有开启

php-fpm的线程数开的够大了


nginxCPU核心数设置也开启
Nginx进程的并发处也很大
PS:总之相关环境配置基本都是宝塔的默认的,但是就是接口响应时间慢,我得出得结论就是laravel加载的慢,特别是上面的日志,走到中间件都4秒多了,但是人家经理一句话就把我憋死了,正式环境为啥好着?是的,正式环境为啥好着,我自己也说不过去啊,2H4G跑一个网站不至于接口都是好几秒,实在没有思路了,chatgpt实在没法解决我的问题了,大家有没有什么其他思路给提供提供
本作品采用《CC 协议》,转载必须注明作者和本文链接
关于 LearnKu
数据库问题,连内网就好了
空接口直接返回helloworld的那种测试了吗
先说结论,一秒是不可能的。
线上简单的接口: 正常都在
150ms之内,甚至更短。排除其他依赖 只用php
如果这一步慢了(正常不会),那才是项目问题。
装了什么扩展
你贴的图基本关系都不大,上面都是高并发的策略,你这个是开发服务器,检查思路
1、排除mysql问题,单独写一个路由输出文本,确认是否是mysql连接问题
2、单独写一个php文件原生链接数据库
3、进入index.phpd断点,排除nginx和转发问题
4、如果是项目问题,那就单步调试,二分法很快就能查到
理论上opcache是编译优化,但是你这个肯定不是编译的问题,但也不排除php环境本身有问题
控制变量一步步查就可以了
盲猜 测试没开opcache 正式开了
直接把入口文件改了、直接输出helloworld 试试
swooletw/laravel-swoole 了解下 对laravel 进行加速 博客:swooletw/laravel-swoole踩的坑
速度能达到100ms 级别 甚至几十ms
楼主如果
PHP >= 8.1可以试试这个分享创造:无需修改任何代码和扩展将你的Laravel项目性能提高20倍如果 楼主怀疑是 laravel 加载速度的问题,可以试着使用下面的方式优化一下。 部署《Laravel 10 中文文档》
此外, 很多调试扩展只在开发环境下才会加载,楼主试着修改一下环境变量试试 。 配置信息《Laravel 10 中文文档》
解决不了问题 就解决出现问题的服务器 抹了它算了 重新部署一下
我也有用laragon遇到localhost比127.0.0.1慢,还有Nginx比Apache慢的问题,至今无解
安装 xhprof 分析请求耗时,一眼定位。
如果能不用laravel,那就换成webman,或者基于swoole的框架。
查看一下资源管理器,看看使用情况,再查一下最近访问的ip。大概率是遇到黑客或病毒了。我上家公司就是这种情况。
你的开发环境是在虚拟机里面吗? 在虚拟机里面要注意下文件跨系统的问题, 如果环境在虚拟机中, 项目在宿主机上, 也可能会造成响应慢的问题
可以看下开发环境是不是开了什么调试的东西,例如 xdebug 之类的
大概率带宽太低,网络拉跨 :joy:
排查是不是带宽问题,可以看下浏览器开发者模式timing里的download,这个耗时长要么带宽低要么返回的数据大。代码、sql层面的耗时情况可以装个debugbar排查下。
先查一下你们的项目是不是有什么内部调用。没法确定,你在宝塔环境里跑一个干净的laravel试一下,不要盲目的去猜,解决问题先找到原因。
可以用XHProf看下接口哪个环节导致的慢
给路由做下缓存 是不是测试环境没开路由缓存和配置缓存
数据库改内网,看下带宽,看下cup
测试环境是不是开了debug,是不是哪里有断点没有清理掉。
不可能这么慢的,最好查一下数据库连接,换我的话就拿最慢的接口断点查。数据都不大的情况下,我服务器 2 核 4G 平均都是40~50毫秒,哪怕一个接口查十几条SQL也才80多毫秒。
禁用 fastcgi_buffering 后,大页面(比如 laravel 的错误页面)内容被截断,需要调整相关 buffer 大小
在 nginx 的配置中修改或加入如下配置
博客:打开新大门,使用 wsl 代替虚拟机的可行性方案
试下