如何解决RoadRunner+XDebug调试时context deadline exceeded错误
解决RoadRunner调试时worker_exec_with_timeout错误的方案
核心问题分析
报错worker_exec_with_timeout: ExecTTL: context deadline exceeded本质是RoadRunner的Worker进程执行超时被终止。虽然你在rr.yaml中设置了exec_ttl: 0s(无超时),但可能存在配置未生效、Supervisor或XDebug额外限制的情况。
1. 确保Octane加载正确的RR配置文件
你通过artisan octane:start启动RoadRunner,Octane默认读取项目根目录的rr.yaml,但如果路径不对或未明确指定,配置可能不生效。修改启动命令,添加--config参数指定配置文件路径:
/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan octane:start --server=roadrunner --host=0.0.0.0 --rpc-port=6001 --port=8100 --config=/var/www/html/rr.yaml
2. 调整Supervisor的进程超时配置
Supervisor管理RR进程时,自身的超时规则可能强制终止调试中的Worker。修改Supervisor配置文件(通常在/etc/supervisor/conf.d/目录下),添加/修改以下参数:
[program:roadrunner-octane] command=/usr/bin/php -d variables_order=EGPCS /var/www/html/artisan octane:start --server=roadrunner --host=0.0.0.0 --rpc-port=6001 --port=8100 --config=/var/www/html/rr.yaml autostart=true autorestart=true startretries=3 stdout_logfile=/var/log/supervisor/roadrunner.log stderr_logfile=/var/log/supervisor/roadrunner-err.log stopwaitsecs=0 ; 取消停止等待超时,避免强制终止调试进程 user=www-data
3. 修改XDebug的调试超时设置
XDebug默认的调试超时可能导致长时间调试时断开连接。编辑PHP的XDebug配置文件(如/etc/php/7.4/cli/conf.d/20-xdebug.ini,路径根据PHP版本调整),增加超时时间:
xdebug.remote_connect_back=1 xdebug.remote_autostart=1 xdebug.remote_timeout=3600 ; 设置为1小时,满足调试时长需求 xdebug.max_nesting_level=256
4. 完善RR的Worker池配置
在rr.yaml中补充内存限制参数,避免Worker因内存问题被意外回收:
version: "3" rpc: listen: tcp://127.0.0.1:6001 server: command: "php worker.php" env: - XDEBUG_SESSION: "1" http: address: "0.0.0.0:8100" pool: num_workers: 1 debug: true supervisor: idle_ttl: "0s" exec_ttl: "0s" max_worker_memory: 0 ; 0表示无内存限制,调试阶段关闭内存回收
5. 重启服务生效配置
修改所有配置后,重启Supervisor和RoadRunner进程:
# 重启指定RR进程 supervisorctl restart roadrunner-octane # 或直接重启Supervisor服务 service supervisor restart
内容的提问来源于stack exchange,提问作者vbulash
相关产品推荐
相关产品推荐

