Ray初始化时Redis连接失败求助:Error 32 Broken pipe
Ray 1.2.0 初始化报错:ConnectionError: Error 32 while writing to socket. Broken pipe.
问题场景
- 版本:Ray 1.2.0
- 运行环境:Linux远程主机部署Ray与Redis,通过VSCode Remote SSH连接并运行.ipynb文件,已通过端口转发正常访问Ray仪表盘(http://127.0.0.1:8265)
- 已排除:数据大小、服务器防火墙问题
- 多种初始化方式均失败:
- 指定
_node_ip_address="0.0.0.0"初始化 - 使用
address='auto'搭配Redis密码初始化 - 强制
ray.services.get_node_ip_address返回127.0.0.1后初始化
- 指定
测试代码
if ray.is_initialized(): ray.shutdown() ray.init(_node_ip_address="0.0.0.0", ignore_reinit_error=True) # 同样失败[1]: # ray.init(address='auto', ignore_reinit_error=True, _redis_password='xxxx') # 同样失败[2]: # 调用ray.init前: # ray.services.get_node_ip_address = lambda: '127.0.0.1'
错误堆栈
~/.local/lib/python3.8/site-packages/redis/connection.py in send_packed_command(self, command, check_health) 715 errno = e.args[0] 716 errmsg = e.args[1] --> 717 raise ConnectionError("Error %s while writing to socket. %s." % 718 (errno, errmsg)) 719 except BaseException: ConnectionError: Error 32 while writing to socket. Broken pipe.
排查与解决建议
- 检查Redis服务状态:在远程主机执行
redis-cli ping,确认Redis是否正常响应。若返回PONG则服务正常,否则重启Redis服务,同时查看Redis日志(通常在/var/log/redis/或指定路径)排查崩溃原因。 - 核对Redis配置:
- 打开
redis.conf,检查bind配置是否为0.0.0.0(允许所有IP访问),若仅绑定127.0.0.1,Ray进程可能无法正常连接。修改后重启Redis。 - 确认
requirepass配置的密码与ray.init中_redis_password完全一致,避免密码错误导致连接中断。 - 检查
protected-mode是否开启,若开启且未设置密码/绑定IP,会拒绝外部连接,可临时设置为protected-mode no测试是否解决问题。
- 打开
- 匹配Ray与Redis的网络配置:查看Ray启动日志,找到类似
Redis address: redis://xxx:6379的条目,确保ray.init时指定的address或相关IP与该地址一致。由于代码在远程主机运行,无需端口转发Redis端口,直接使用远程主机内部IP或127.0.0.1连接Redis即可。 - 清理残留进程:执行
ray stop彻底终止所有Ray进程,再用ps aux | grep redis找到Redis进程并杀掉,之后重新启动Ray和Redis,避免残留进程导致的连接异常。 - 版本兼容性检查:Ray 1.2.0属于旧版本,可能与高版本Redis存在兼容性问题,尝试将Redis降级至Ray 1.2.0推荐的版本(如Redis 5.x系列)。
内容的提问来源于stack exchange,提问作者qubit
相关产品推荐
相关产品推荐

