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

Laravel Octane搭配Supervisor+Nginx部署后偶发请求失败问题排查

故障原因定位
  1. 核心原因是Laravel Octane默认请求数重启机制与Supervisor进程拉起逻辑冲突:Octane默认--max-requests参数值为5000,即每处理完5000次请求就会主动停止服务触发重启,Supervisor检测到进程退出后会立刻尝试拉起新的Octane进程,但旧进程还未完全释放8089端口,导致新进程启动时报Address already in use错误,端口占用窗口期内的请求就会返回失败,和你观测到的每4000-5000次请求出现少量失败的现象完全匹配。
  2. 辅助诱因是Supervisor配置不合理:stopwaitsecs设置为3600秒过长,且没有配置端口预释放逻辑,进一步放大了端口占用冲突的概率。
解决方案

1. 调整Octane启动与Supervisor配置

修改/etc/supervisor/conf.d/laravel-octane-worker.conf,增加端口预释放逻辑、调高请求数上限减少重启频率,调整后配置如下:

process_name=%(program_name)s_%(process_num)02d
# 启动前先释放8089端口占用,调高max-requests减少重启频率
command=bash -c "fuser -k 8089/tcp || true && php /var/www/html/artisan octane:start --server=swoole --workers=8 --task-workers=4 --port=8089 --max-requests=100000"
autostart=true
autorestart=true
user=www-data
redirect_stderr=true
stdout_logfile=/var/www/html/octane-worker.log
# 调整停止等待时间为30秒,避免无效等待
stopwaitsecs=30
numprocs=1
# 配置适配Swoole的停止信号
stopsignal=TERM

2. 增加Nginx代理容错配置

在Nginx站点配置的location块中新增重试逻辑,覆盖Octane重启的短暂窗口期:

location / {
    proxy_pass    http://127.0.0.1:8089;
    proxy_http_version 1.1;
    proxy_set_header Upgrade $http_upgrade;
    proxy_set_header Connection 'upgrade';
    proxy_set_header Host $host;
    proxy_cache_bypass $http_upgrade;
    # 新增容错重试配置
    proxy_next_upstream error timeout invalid_header http_500 http_502 http_503 http_504;
    proxy_connect_timeout 2s;
    proxy_send_timeout 10s;
    proxy_read_timeout 10s;
}

3. 配置生效验证

执行以下命令重启服务生效:

# 重载Supervisor配置并重启Octane进程
supervisorctl reread && supervisorctl update && supervisorctl restart laravel-octane-worker:*
# 重载Nginx配置
nginx -s reload

重启后观测Octane日志是否还有端口占用报错,压测超过5000次请求验证失败现象是否消失。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.02 07:54:03