---
title: 进入连接后报错 socket write error 或者 closed by server -OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于进入连接后报错 socket write error 或者 closed by server 相关的常见问题和使用技巧，帮助您快速解决进入连接后报错 socket write error 或者 closed by server 的难题。
---
切换语言

- 中文站 - 简体中文
- International - English
- 日本站 - 日本語

划线反馈

# 进入连接后报错 socket write error 或者 closed by server

更新时间：2025-06-17 09:01

适用版本： V3.1.x、V3.2.x、V3.3.x、V3.4.x、V4.0.x、V4.1.x、V4.2.x 内容类型：Troubleshoot  

## 问题现象

连接 OBProxy 时，ODC 频繁出现连接已断开提示，但是直连 OBServer 则无此问题。

- 报错信息可能包括：

     - `Connection reset by peer: socket write error`
     - `unexpeted end of steam, read 0 bytes from 4(socket was closed by server)`
 - 报错信息示例：

     - 弹窗形式

       ![](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/KB/3.common-troubleshooting/2.database-connection/5.socket-write-error-or-closed-by-server-after-entering-the-connection/1.png)
     - SQL 执行结果形式

       ![](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/KB/3.common-troubleshooting/2.database-connection/5.socket-write-error-or-closed-by-server-after-entering-the-connection/2.png)

## 问题原因

OBProxy 配置了连接保活参数时，当 user_timeout 设置值较小时，如果出现网络丢包，可能出现 keepalive 未返回 ack，超过超时设置，proxy 端会断开连接。

抓包示例：

 ![](https://obbusiness-private.oss-cn-shanghai.aliyuncs.com/doc/img/odc/KB/3.common-troubleshooting/2.database-connection/5.socket-write-error-or-closed-by-server-after-entering-the-connection/3.png)

## 解决方法

1. 修改 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 中断。 |
 2. 使用 OBClient 命令行工具查看当前配置，通过 root@proxysys 账号连接 OBProxy。

   ```shell
   -- 查看当前配置
   show proxyconfig like 'client_sock_option_flag_out';
   show proxyconfig like 'client_tcp%';

   ```
 3. 推荐的配置。

   ```shell
   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

   ```

上一篇

[SQL 执行过程报错 Connection reset](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000000262288)

下一篇

[创建 MySQL 类型数据源报错](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000001393334) ![有帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*y6ocSqN8cqsAAAAAAAAAAAAAARQnAQ)![无帮助](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*BG9IQJyLHF8AAAAAAAAAAAAAARQnAQ)![反馈](https://gw.alipayobjects.com/mdn/ob_asset/afts/img/A*eTWdQKCRKHwAAAAAAAAAAAAAARQnAQ)[AI](https://www.oceanbase.com/obi) 咨询热线
