宝塔环境下的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秒,所以业务并不算复杂

宝塔环境下的laravel项目,接口响应都是几秒,有什么优化方案?
这是页面上http请求时间,慢了很多都是七八秒,快了也就是一两秒,实际这些接口中并没有复杂的sql以及业务,数据库的数据最多的也就是几千

宝塔环境下的laravel项目,接口响应都是几秒,有什么优化方案?
这个是宝塔的访问限制,也没有开启

宝塔环境下的laravel项目,接口响应都是几秒,有什么优化方案?
php-fpm的线程数开的够大了

宝塔环境下的laravel项目,接口响应都是几秒,有什么优化方案?

宝塔环境下的laravel项目,接口响应都是几秒,有什么优化方案?
nginxCPU核心数设置也开启
Nginx进程的并发处也很大

PS:总之相关环境配置基本都是宝塔的默认的,但是就是接口响应时间慢,我得出得结论就是laravel加载的慢,特别是上面的日志,走到中间件都4秒多了,但是人家经理一句话就把我憋死了,正式环境为啥好着?是的,正式环境为啥好着,我自己也说不过去啊,2H4G跑一个网站不至于接口都是好几秒,实在没有思路了,chatgpt实在没法解决我的问题了,大家有没有什么其他思路给提供提供

本作品采用《CC 协议》,转载必须注明作者和本文链接
《L03 构架 API 服务器》
你将学到如 RESTFul 设计风格、PostMan 的使用、OAuth 流程,JWT 概念及使用 和 API 开发相关的进阶知识。
《L01 基础入门》
我们将带你从零开发一个项目并部署到线上,本课程教授 Web 开发中专业、实用的技能,如 Git 工作流、Laravel Mix 前端工作流等。
讨论数量: 57

数据库问题,连内网就好了

8个月前 评论
若只如初见 (楼主) 8个月前
liaosp (作者) 8个月前
liaosp (作者) 8个月前
deatil 8个月前
若只如初见 (楼主) 8个月前
liaosp (作者) 8个月前

空接口直接返回helloworld的那种测试了吗

8个月前 评论
若只如初见 (楼主) 8个月前
若只如初见 (楼主) 8个月前
php_yt (作者) 8个月前

先说结论,一秒是不可能的。

file

线上简单的接口: 正常都在 150ms 之内,甚至更短。

排除其他依赖 只用php

cd public
php -S  0.0.0.0:8081
time curl http://127.0.0.1:8081

如果这一步慢了(正常不会),那才是项目问题。

8个月前 评论
若只如初见 (楼主) 8个月前
lyxxxh (作者) 8个月前
若只如初见 (楼主) 8个月前

file 不至于那么慢 先判断到底是哪个节点出问题,是nginx到php,还是框架执行太久?还是数据库? 框架的话,再不至于用二分法找到那个慢的地方,然后解决就可以

8个月前 评论

你贴的图基本关系都不大,上面都是高并发的策略,你这个是开发服务器,检查思路

1、排除mysql问题,单独写一个路由输出文本,确认是否是mysql连接问题

2、单独写一个php文件原生链接数据库

3、进入index.phpd断点,排除nginx和转发问题

4、如果是项目问题,那就单步调试,二分法很快就能查到

理论上opcache是编译优化,但是你这个肯定不是编译的问题,但也不排除php环境本身有问题

8个月前 评论
若只如初见 (楼主) 8个月前

控制变量一步步查就可以了

  1. 从浏览器到nginx,试试静态页面加载速度。
  2. nginx 到 php,访问一个非框架的php文件。
  3. 框架里的,输出 hello world 试试
  4. 然后再一步步排查 中间件等。
8个月前 评论

盲猜 测试没开opcache 正式开了

8个月前 评论
Imuyu 8个月前
Junwind 8个月前

直接把入口文件改了、直接输出helloworld 试试

8个月前 评论
若只如初见 (楼主) 8个月前

swooletw/laravel-swoole 了解下 对laravel 进行加速 博客:swooletw/laravel-swoole踩的坑
速度能达到100ms 级别 甚至几十ms

8个月前 评论
若只如初见 (楼主) 8个月前
Awx (作者) 8个月前
Awx (作者) 8个月前
若只如初见 (楼主) 8个月前
Awx (作者) 8个月前
Awx (作者) 8个月前
sbihgu 7个月前

如果 楼主怀疑是 laravel 加载速度的问题,可以试着使用下面的方式优化一下。 部署《Laravel 10 中文文档》

此外, 很多调试扩展只在开发环境下才会加载,楼主试着修改一下环境变量试试 。 配置信息《Laravel 10 中文文档》

file

8个月前 评论
徵羽宫 (作者) 8个月前

解决不了问题 就解决出现问题的服务器 抹了它算了 重新部署一下

8个月前 评论

我也有用laragon遇到localhost比127.0.0.1慢,还有Nginx比Apache慢的问题,至今无解

8个月前 评论
wslsq (作者) 6个月前

安装 xhprof 分析请求耗时,一眼定位。

8个月前 评论
Junwind

如果能不用laravel,那就换成webman,或者基于swoole的框架。

8个月前 评论

查看一下资源管理器,看看使用情况,再查一下最近访问的ip。大概率是遇到黑客或病毒了。我上家公司就是这种情况。

8个月前 评论

你的开发环境是在虚拟机里面吗? 在虚拟机里面要注意下文件跨系统的问题, 如果环境在虚拟机中, 项目在宿主机上, 也可能会造成响应慢的问题

8个月前 评论

可以看下开发环境是不是开了什么调试的东西,例如 xdebug 之类的

8个月前 评论
cydxin 7个月前
Michael锐生 (作者) 7个月前

大概率带宽太低,网络拉跨 :joy:

8个月前 评论
kebenxiaoming (作者) 8个月前

排查是不是带宽问题,可以看下浏览器开发者模式timing里的download,这个耗时长要么带宽低要么返回的数据大。代码、sql层面的耗时情况可以装个debugbar排查下。

file

file

8个月前 评论
yourself

先查一下你们的项目是不是有什么内部调用。没法确定,你在宝塔环境里跑一个干净的laravel试一下,不要盲目的去猜,解决问题先找到原因。

8个月前 评论

可以用XHProf看下接口哪个环节导致的慢

8个月前 评论

给路由做下缓存 是不是测试环境没开路由缓存和配置缓存

php artisan route:cache
php artisan config:cache
7个月前 评论

数据库改内网,看下带宽,看下cup

7个月前 评论

测试环境是不是开了debug,是不是哪里有断点没有清理掉。

7个月前 评论

不可能这么慢的,最好查一下数据库连接,换我的话就拿最慢的接口断点查。数据都不大的情况下,我服务器 2 核 4G 平均都是40~50毫秒,哪怕一个接口查十几条SQL也才80多毫秒。

7个月前 评论

禁用 fastcgi_buffering 后,大页面(比如 laravel 的错误页面)内容被截断,需要调整相关 buffer 大小
在 nginx 的配置中修改或加入如下配置

http {
    fastcgi_buffer_size 1024k;
    fastcgi_buffers 16 256k;
    fastcgi_busy_buffers_size 2048k;
    fastcgi_temp_file_write_size 4096k;
    fastcgi_buffering off;
}

博客:打开新大门,使用 wsl 代替虚拟机的可行性方案

试下

6个月前 评论

讨论应以学习和精进为目的。请勿发布不友善或者负能量的内容,与人为善,比聪明更重要!