You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP执行前18秒空闲时间求助:Symfony+API Platform请求延迟

排查API Platform请求前置空闲时间过长的问题

针对你遇到的API Platform请求耗时20秒、且空闲时间出现在index.php执行前的情况,结合EasyAdmin请求正常的对比,给出以下排查方向:

1. 检查PHP-FPM进程配置与状态

API请求通常并发量更高,容易触发PHP-FPM进程队列等待:

  • 查看PHP-FPM配置文件(通常在/etc/php/{version}/fpm/pool.d/www.conf),调整进程参数:
    • pm.max_children:4核服务器可设为20-30,根据实际资源占用调整
    • pm.start_servers、pm.min_spare_servers、pm.max_spare_servers:分别设为8、5、15左右,避免进程频繁启停
  • 开启PHP-FPM状态页:在pool配置中添加pm.status_path = /fpm-status,然后在NGINX配置中添加对应location,访问后查看queue、idle processes、active processes指标,确认是否有请求排队
  • 开启PHP-FPM慢日志:设置slowlog = /var/log/php-fpm-slow.log和request_slowlog_timeout = 5s,查看是否有进程初始化或连接阶段的慢请求

2. 优化NGINX与PHP-FPM的通信

  • 将NGINX的fastcgi_pass从TCP方式(比如127.0.0.1:9000)改为Unix Socket(比如unix:/run/php/php{version}-fpm.sock),减少网络层开销
  • 检查NGINX的fastcgi_connect_timeout、fastcgi_send_timeout、fastcgi_read_timeout设置,建议设为60s,确保超时时间合理
  • 查看NGINX的access.log,对比API和EasyAdmin请求的request_time和upstream_response_time,确认延迟出现在NGINX转发阶段还是PHP-FPM处理前

3. 验证API Platform缓存有效性

虽然你已启用Redis,但API Platform的元数据缓存可能未正确生效:

  • 确认config/packages/api_platform.yaml中cache.metadata.enabled设为true,并配置Redis作为缓存池
  • 重新生成Prod环境缓存:执行bin/console cache:clear --env=prod --no-warmup,再手动预热缓存bin/console cache:warmup --env=prod
  • 执行bin/console debug:router查看API路由的缓存状态,确保没有每次请求都重新生成路由规则

4. 系统层面资源排查

  • 用htop监控CPU、内存占用,确认请求高峰期是否有进程资源耗尽
  • 用iostat -x 1查看磁盘IO情况,若%util接近100%,说明磁盘读写瓶颈导致PHP-FPM进程启动或缓存读取缓慢
  • 检查系统文件描述符限制:执行ulimit -n,若数值小于10240,修改/etc/security/limits.conf提高限制,避免NGINX/PHP-FPM无法创建足够连接

5. 排除认证/授权前置延迟

API Platform通常依赖认证机制(如JWT),若认证逻辑涉及外部服务或慢查询,可能在PHP代码执行前的初始化阶段产生延迟:

  • 检查JWT配置,确认token验证是否本地完成(如使用本地密钥而非远程服务)
  • 对比EasyAdmin和API的认证流程,看API是否有额外的前置检查(如IP白名单、请求头校验)导致阻塞

内容的提问来源于stack exchange,提问作者DJMDZ

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 01:52:44