Laravel8+Nginx环境下Ajax查询快但接口响应缓慢问题排查求助
接口响应缓慢可能的诱因排查方向
- Nginx 配置层面问题
检查Nginx的fastcgi_buffers、fastcgi_buffer_size配置,如果缓冲区设置过小,11KB的响应也可能触发缓冲区溢出写入临时磁盘文件,大幅增加耗时;同时确认tcp_nodelay、tcp_nopush配置是否开启,避免TCP Nagle算法导致的小包发送延迟;另外排查是否开启了无用的响应过滤、访问日志同步写入等逻辑,可临时关闭access_log测试耗时是否正常。 - PHP-FPM 配置与输出缓冲问题
确认php.ini中output_buffering、implicit_flush配置是否符合预期,是否开启了fastcgi_finish_request特性;开启PHP-FPM慢日志,设置request_slowlog_timeout = 1s,可以直接定位到请求阶段的慢调用栈,包括代码返回后执行的隐藏逻辑。 - Laravel 后置执行逻辑问题
你统计的duration仅包含业务逻辑执行耗时,未覆盖响应返回前的后置逻辑:- 可终止中间件(Terminable Middleware):如果未开启
fastcgi_finish_request,Laravel会在响应发送给客户端前执行所有可终止中间件的terminate方法,常见的慢操作包括远程日志上报、同步队列执行、Session写入、监控数据上报等 - 注册的 shutdown 函数:通过
register_shutdown_function注册的回调会在PHP进程退出前执行,第三方扩展、Laravel底层、业务代码都可能注册这类回调包含慢操作 - Response 后续事件:Laravel的
ResponseSent等事件如果绑定了慢逻辑,也会拉长总耗时
- 可终止中间件(Terminable Middleware):如果未开启
- 系统层资源瓶颈
用iostat、vmstat、top命令排查请求触发时的系统状态:确认磁盘IO是否被占满(比如日志大量写入、磁盘坏道)、是否存在Swap分区频繁读写、CPU是否被某个异常进程占用;另外检查服务器的DNS配置,如果代码中有请求外部服务的逻辑,DNS解析超时也可能导致响应卡住。
内容的提问来源于stack exchange,提问作者realtebo
相关产品推荐
相关产品推荐

