首批通过分布式安全可靠测评,为关键业务系统打造
进入连接后报错 socket write error 或者 closed by server
更新时间:2025-06-17 09:01
问题现象
连接 OBProxy 时,ODC 频繁出现连接已断开提示,但是直连 OBServer 则无此问题。
报错信息可能包括:
Connection reset by peer: socket write errorunexpeted end of steam, read 0 bytes from 4(socket was closed by server)
报错信息示例:
弹窗形式

SQL 执行结果形式

问题原因
OBProxy 配置了连接保活参数时,当 user_timeout 设置值较小时,如果出现网络丢包,可能出现 keepalive 未返回 ack,超过超时设置,proxy 端会断开连接。
抓包示例:
解决方法
修改 OBProxy 的连接保活配置,确保
已开启连接保活 client_sock_option_flag_out=2
设置client_tcp_user_timeout 值。推荐设置为 0,或者至少大于 client_tcp_keepintvl 的值。
注意
- 修改 OBProxy 配置需要使用 root@proxysys账号,否则修改无效。
- 如为 OCP 管理的 OBProxy 集群,用户可以通过 OCP 修改 OBProxy 配置。
OBProxy 客户端连接 tcp keeplive 的相关参数说明:
参数 说明 client_sock_option_flag_out client 端 socket 选项,bit 1: NO_DELAY, bit 2: KEEP_ALIVE。 client_tcp_keepidle 表示启动 keepalive 时长。 client_tcp_keepintvl 表示启动 keepalive 后,发送一次探活包时长。 client_tcp_keepcnt 表示启动 keepalive 后,未收到响应的探活包数量,此情况表示已断开连接。 client_tcp_user_timeout 等待 TCP 层 ACK 确认信息的超时时长,超过时 OBProxy 会主动断开连接。 注意
此配置项的值应大于 client_tcp_keepintvl 配置项的值,OBProxy 推荐设置为 0,否则在网络状况不佳时(如出现丢包情况)会导致连接被 OBProxy 中断。
使用 OBClient 命令行工具查看当前配置,通过 root@proxysys 账号连接 OBProxy。
-- 查看当前配置 show proxyconfig like 'client_sock_option_flag_out'; show proxyconfig like 'client_tcp%';推荐的配置。
alter proxyconfig set client_sock_option_flag_out=2 alter proxyconfig set client_tcp_keepidle=5 alter proxyconfig set client_tcp_keepintvl=5 alter proxyconfig set client_tcp_keepcnt=5 alter proxyconfig set client_tcp_user_timeout=0