Oceanbase 日志频繁的输出sock has error(ret=-4009)

在近期巡检时oceanbase的observer日志中经常有看到“[lt=11][errcode=-4009] sock has error(ret=-4009)”的报错,是否有影响?

关于该报错,官方论坛的解释

  1. 关于 errcode=-4009
    • 可能原因:这个错误码通常与网络连接有关,特别是当客户端(如Zabbix)尝试通过 OBProxy 的 2883 端口连接到 OceanBase 数据库时,如果连接不稳定或超时,可能会导致此错误。
    • 解决方法:
      • 检查 Zabbix 与 OBProxy 之间的网络连接是否稳定,确保没有防火墙或其他安全设置阻止了通信。
      • 增加 Zabbix 监控项的请求超时时间,以避免因短暂的网络延迟而触发错误。
      • 如果问题依旧存在,可以考虑调整 OBProxy 的配置参数,例如增加 idle_timeout 参数值来延长空闲连接的时间。

本案例如下

[admin@observer1 log]$ grep ob_sql_sock_session observer.log
[2026-10-19 15:43:16.864382] WDIAG [RPC.OBMYSQL] async_write_data (ob_sql_sock_session.cpp:162) [20033][T1_L0_G10000][T1][YB42AC1416D5-00065E1BF7AD227C-0-0] [lt=11][errcode=-4009] sock has error(ret=-4009)
[2026-10-19 15:43:21.852320] WDIAG [RPC.OBMYSQL] async_write_data (ob_sql_sock_session.cpp:162) [20023][T1_L0_G10000][T1][YB42AC1416D5-00065E16E07FD5B9-0-0] [lt=10][errcode=-4009] sock has error(ret=-4009)
[2026-10-19 15:43:26.267186] WDIAG [RPC.OBMYSQL] async_write_data (ob_sql_sock_session.cpp:162) [20020][T1_L0_G10000][T1][YB42AC1416D5-00065E1BF7AD22A4-0-0] [lt=16][errcode=-4009] sock has error(ret=-4009)
[2026-10-19 15:43:26.946451] WDIAG [RPC.OBMYSQL] async_write_data (ob_sql_sock_session.cpp:162) [20021][T1_L0_G10000][T1][YB42AC1416D5-00065E16E07FD5D3-0-0] [lt=31][errcode=-4009] sock has error(ret=-4009)
...

[2026-10-19 15:44:36.982128] WDIAG [RPC.OBMYSQL] async_write_data (ob_sql_sock_session.cpp:162) [20027][T1_L0_G10000][T1][YB42AC1416D5-00065E16E07FD8F3-0-0] [lt=18][errcode=-4009] sock has error(ret=-4009)
[2026-10-19 15:44:47.017817] WDIAG [RPC.OBMYSQL] async_write_data (ob_sql_sock_session.cpp:162) [20020][T1_L0_G10000][T1][YB42AC1416D5-00065E1BF7AD2427-0-0] [lt=15][errcode=-4009] sock has error(ret=-4009)
[2026-10-19 15:44:51.880875] WDIAG [RPC.OBMYSQL] async_write_data (ob_sql_sock_session.cpp:162) [20033][T1_L0_G10000][T1][YB42AC1416D5-00065E16E07FD914-0-0] [lt=10][errcode=-4009] sock has error(ret=-4009)

以其中一个trace_id 查找这个 Trace ID 的完整上下文

[admin@observer1 log]$ grep YB42AC1416D5-00065E1BF7ACE5C6-0-0 observer.log.20261019145810932

[2026-10-19 14:57:41.881652] WDIAG [RPC.OBMYSQL] handle_sock_event (ob_sql_nio.cpp:1011) [19582][sql_nio1][T0][Y0-0000000000000000-0-0] [lt=92][errcode=0] socket closed, it maybe disconnecte                                           d by the client or by observer actively(mask=8197, *s={this:0x7fe47aa78030, session_id:3221691106, trace_id:YB42AC1416D5-00065E1BF7ACE5C6-0-0, sql_handling_stage:2, sql_initiative_shutdown:f                                           alse, reader:{fd:174}, err:5, last_decode_time:1792393061879775, pending_write_task:{buf:null, sz:0}, need_epoll_trigger_write:false, consume_size:1476, pending_flag:1, may_handling_flag:tru                                           e, handler_close_flag:false})
[2026-10-19 14:57:41.881783] WDIAG [SERVER] disconnect (obmp_packet_sender.cpp:860) [20037][T1_L0_G10000][T1][YB42AC1416D5-00065E1BF7ACE5C6-0-0] [lt=35][errcode=0] server close connection(se                                           ssid=3221691106, proxy_sessid=0, stack="0x2315fecf 0xc4138f0 0xc3d4b2b 0xc6e8b61 0x22a14916 0x22aa57d5 0xc2e3ef9 0x23243387 0x7fe58de08ea5 0x7fe58db31b0d")
[2026-10-19 14:57:41.881802] INFO  [SERVER] process (obmp_quit.h:60) [20037][T1_L0_G10000][T1][YB42AC1416D5-00065E1BF7ACE5C6-0-0] [lt=17] quit
[2026-10-19 14:57:41.881812] WDIAG [RPC.OBMYSQL] async_write_data (ob_sql_sock_session.cpp:162) [20037][T1_L0_G10000][T1][YB42AC1416D5-00065E1BF7ACE5C6-0-0] [lt=8][errcode=-4009] sock has er                                           ror(ret=-4009)
[2026-10-19 14:57:41.881823] WDIAG [SERVER] flush_buffer (obmp_packet_sender.cpp:1064) [20037][T1_L0_G10000][T1][YB42AC1416D5-00065E1BF7ACE5C6-0-0] [lt=10][errcode=-4009] write response fail                                           (ret=-4009)
[2026-10-19 14:57:41.881832] WDIAG [SERVER] response (obmp_base.cpp:61) [20037][T1_L0_G10000][T1][YB42AC1416D5-00065E1BF7ACE5C6-0-0] [lt=8][errcode=-4009] failed to flush_buffer(ret=-4009)
[2026-10-19 14:57:41.881841] WDIAG [RPC.FRAME] run (ob_sql_processor.cpp:43) [20037][T1_L0_G10000][T1][YB42AC1416D5-00065E1BF7ACE5C6-0-0] [lt=7][errcode=-4009] response rpc result fail(ret=-                                           4009)

从这段 OceanBase observer.log 看,当前最直接的现象是:客户端连接已经关闭,Observer 在向该连接写响应数据时失败。 这更像是连接断开后的写失败,不能仅凭这几行判断为 Observer 内部故障,也不能直接认定是网络问题。

这里有两个值得注意的细节:

  • errcode=-4009:这是 OceanBase 内部错误码,日志中的 sock has error 表明 socket 存在错误状态。应结合对应版本的错误码定义确认其精确含义。
  • sql_initiative_shutdown=false:说明该连接记录中的主动关闭标志为 false,但这不能单独证明是客户端主动断开。日志也明确提示,连接可能由客户端断开,也可能由 Observer 主动关闭。

建议按以下顺序排查:

  1. 客户端主动断开连接:应用连接池回收连接、SQL 超时后取消请求、客户端发送 COM_QUIT,或业务程序关闭连接。
  2. 网络链路中断:客户端与 Observer 之间存在负载均衡、代理、防火墙或 NAT,连接被中间设备回收。
  3. Observer 主动关闭连接:例如会话清理、超时处理或其他异常路径。需要查找关闭前的日志来确认。
  4. 响应写入时发生竞争:连接关闭事件与 SQL 响应写入同时发生,导致写操作失败。这可能只是断连后的正常连带现象,不一定是根因。

关联 Session ID

日志中的 Session ID 为 3221691106,可以继续检索:

grep -n '3221691106' observer.log.20261019145810932

如果日志轮转了,也要检索相邻时间段的日志文件,确认会话建立、SQL 执行及断开前的事件顺序。

admin@observer1 log]$ grep 3221691106  observer.log.20261019145810932
[2026-10-19 14:57:41.598177] INFO  [RPC.OBMYSQL] sm_conn_build_handshake (obsm_conn_callback.cpp:117) [19582][sql_nio1][T0][Y0-0000000000000000-0-0] [lt=75] new mysql sessid created(conn.sessid_=3221691106, support_ssl=false)
[2026-10-19 14:57:41.598282] INFO  [RPC.OBMYSQL] init (obsm_conn_callback.cpp:137) [19582][sql_nio1][T0][Y0-0000000000000000-0-0] [lt=30] sm conn init succ(conn.sessid_=3221691106, sess.client_addr_="172.20.22.213:22500")
[2026-10-19 14:57:41.598307] INFO  [RPC.OBMYSQL] do_accept_one (ob_sql_nio.cpp:1093) [19582][sql_nio1][T0][Y0-0000000000000000-0-0] [lt=18] accept one succ(*s={this:0x7fe47aa78030, session_id:3221691106, trace_id:Y0-0000000000000000-0-0, sql_handling_stage:-1, sql_initiative_shutdown:false, reader:{fd:174}, err:0, last_decode_time:0, pending_write_task:{buf:null, sz:0}, need_epoll_trigger_write:false, consume_size:0, pending_flag:0, may_handling_flag:true, handler_close_flag:false})
[2026-10-19 14:57:41.601048] INFO  [SERVER] process (obmp_connect.cpp:537) [19823][T1_MysqlQueueTh][T1][Y0-00065E133F8D8B04-0-0] [lt=27] MySQL LOGIN(direct_client_ip="172.20.22.213", client_ip=172.20.22.213, tenant_name=sys, tenant_id=1, user_name=ocp_monitor, host_name=%, sessid=3221691106, proxy_sessid=0, client_sessid=3221691106, from_proxy=false, from_java_client=false, from_oci_client=false, from_jdbc_client=false, capability=762509, proxy_capability=0, use_ssl=false, c/s protocol="OB_MYSQL_CS_TYPE", autocommit=false, proc_ret=0, ret=0, conn->client_type_=3, conn->client_version_=0)
[2026-10-19 14:57:41.881652] WDIAG [RPC.OBMYSQL] handle_sock_event (ob_sql_nio.cpp:1011) [19582][sql_nio1][T0][Y0-0000000000000000-0-0] [lt=92][errcode=0] socket closed, it maybe disconnected by the client or by observer actively(mask=8197, *s={this:0x7fe47aa78030, session_id:3221691106, trace_id:YB42AC1416D5-00065E1BF7ACE5C6-0-0, sql_handling_stage:2, sql_initiative_shutdown:false, reader:{fd:174}, err:5, last_decode_time:1792393061879775, pending_write_task:{buf:null, sz:0}, need_epoll_trigger_write:false, consume_size:1476, pending_flag:1, may_handling_flag:true, handler_close_flag:false})
[2026-10-19 14:57:41.881712] INFO  [RPC.OBMYSQL] on_disconnect (obsm_conn_callback.cpp:268) [19582][sql_nio1][T0][Y0-0000000000000000-0-0] [lt=47] kill and revert session(conn.sessid_=3221691106, proxy_sessid=0, server_id=1, ret=0)
[2026-10-19 14:57:41.881783] WDIAG [SERVER] disconnect (obmp_packet_sender.cpp:860) [20037][T1_L0_G10000][T1][YB42AC1416D5-00065E1BF7ACE5C6-0-0] [lt=35][errcode=0] server close connection(sessid=3221691106, proxy_sessid=0, stack="0x2315fecf 0xc4138f0 0xc3d4b2b 0xc6e8b61 0x22a14916 0x22aa57d5 0xc2e3ef9 0x23243387 0x7fe58de08ea5 0x7fe58db31b0d")
[2026-10-19 14:57:42.025503] INFO  [RPC.OBMYSQL] handle_pending_destroy_list (ob_sql_nio.cpp:988) [19582][sql_nio1][T0][Y0-0000000000000000-0-0] [lt=15] can close safely, do destroy(*s={this:0x7fe47aa78030, session_id:3221691106, trace_id:Y0-0000000000000000-0-0, sql_handling_stage:256, sql_initiative_shutdown:true, reader:{fd:174}, err:5, last_decode_time:1792393061879775, pending_write_task:{buf:null, sz:0}, need_epoll_trigger_write:false, consume_size:1481, pending_flag:1, may_handling_flag:false, handler_close_flag:false})
[2026-10-19 14:57:42.025592] INFO  [RPC.OBMYSQL] sm_conn_unlock_tenant (obsm_conn_callback.cpp:155) [19582][sql_nio1][T0][Y0-0000000000000000-0-0] [lt=50] unlock session of tenant(conn.sessid_=3221691106, proxy_sessid=0, conn.tenant_id_=1)
[2026-10-19 14:57:42.025610] INFO  [RPC.OBMYSQL] destroy (obsm_conn_callback.cpp:243) [19582][sql_nio1][T0][Y0-0000000000000000-0-0] [lt=16] connection close(sessid=3221691106, proxy_sessid=0, tenant_id=1, server_id=1, from_proxy=false, from_java_client=false, c/s protocol="OB_MYSQL_CS_TYPE", is_need_clear_sessid_=true, is_sess_alloc_=true, ret=0, trace_id=YB42AC1416D5-00065E1BF7ACE5C2-0-0, conn.pkt_rec_wrapper_=[start_pkt_pos_:0, cur_pkt_pos_:20, pkt_rec[0]:{send:obp_mysql_header_{len_:11, seq_:3}, pkt_name:"PKT_OKP", obp_mysql_header_.is_send_:1}, pkt_rec[1]:{receive:obp_mysql_header_{len_:98, rec_:98, seq_:0}, pkt_name:"COM_QUERY", obp_mysql_header_.type_:3, obp_mysql_header_.is_send_:0}, pkt_rec[2]:{send:obp_mysql_header_{len_:5, seq_:2}, pkt_name:"PKT_RESHEAD", obp_mysql_header_.is_send_:1}, pkt_rec[3]:{send:obp_mysql_header_{pkt_num_:4, seq_:6}, pkt_name:"PKT_FIELD", obp_mysql_header_.is_send_:1}, pkt_rec[4]:{send:obp_mysql_header_{len_:9, seq_:7}, pkt_name:"PKT_EOF", obp_mysql_header_.is_send_:1}, pkt_rec[5]:{send:obp_mysql_header_{pkt_num_:7, seq_:14}, pkt_name:"PKT_ROW", obp_mysql_header_.is_send_:1}, pkt_rec[6]:{send:obp_mysql_header_{len_:9, seq_:15}, pkt_name:"PKT_EOF", obp_mysql_header_.is_send_:1}, pkt_rec[7]:{receive:obp_mysql_header_{len_:241, rec_:241, seq_:0}, pkt_name:"COM_QUERY", obp_mysql_header_.type_:3, obp_mysql_header_.is_send_:0}, pkt_rec[8]:{send:obp_mysql_header_{len_:5, seq_:2}, pkt_name:"PKT_RESHEAD", obp_mysql_header_.is_send_:1}, pkt_rec[9]:{send:obp_mysql_header_{pkt_num_:3, seq_:5}, pkt_name:"PKT_FIELD", obp_mysql_header_.is_send_:1}, pkt_rec[10]:{send:obp_mysql_header_{len_:9, seq_:6}, pkt_name:"PKT_EOF", obp_mysql_header_.is_send_:1}, pkt_rec[11]:{send:obp_mysql_header_{pkt_num_:7, seq_:13}, pkt_name:"PKT_ROW", obp_mysql_header_.is_send_:1}, pkt_rec[12]:{send:obp_mysql_header_{len_:9, seq_:14}, pkt_name:"PKT_EOF", obp_mysql_header_.is_send_:1}, pkt_rec[13]:{receive:obp_mysql_header_{len_:1024, rec_:1024, seq_:0}, pkt_name:"COM_QUERY", obp_mysql_header_.type_:3, obp_mysql_header_.is_send_:0}, pkt_rec[14]:{send:obp_mysql_header_{len_:5, seq_:2}, pkt_name:"PKT_RESHEAD", obp_mysql_header_.is_send_:1}, pkt_rec[15]:{send:obp_mysql_header_{pkt_num_:3, seq_:5}, pkt_name:"PKT_FIELD", obp_mysql_header_.is_send_:1}, pkt_rec[16]:{send:obp_mysql_header_{len_:9, seq_:6}, pkt_name:"PKT_EOF", obp_mysql_header_.is_send_:1}, pkt_rec[17]:{send:obp_mysql_header_{pkt_num_:440, seq_:190}, pkt_name:"PKT_ROW", obp_mysql_header_.is_send_:1}, pkt_rec[18]:{send:obp_mysql_header_{len_:9, seq_:191}, pkt_name:"PKT_EOF", obp_mysql_header_.is_send_:1}, pkt_rec[19]:{receive:obp_mysql_header_{len_:1, rec_:1, seq_:0}, pkt_name:"COM_QUIT", obp_mysql_header_.type_:1, obp_mysql_header_.is_send_:0}], disconnect_state=3)
[2026-10-19 14:57:42.026932] INFO  [SERVER] run (obmp_disconnect.cpp:79) [19883][T1_L0_G0][T1][Y0-0000000000000000-0-0] [lt=24] free session successfully(sessid=3221691106)
[2026-10-19 14:57:42.026974] INFO  [SERVER] run (obmp_disconnect.cpp:86) [19883][T1_L0_G0][T1][Y0-0000000000000000-0-0] [lt=40] mark session id unused(sessid=3221691106)

可以把分析进一步缩小到 OCP 监控客户端 ocp_monitor 的连接断开过程。

1. 关键发现:连接建立后约 284 毫秒就关闭

客户端 IP:172.20.22.213 · 租户:sys · 用户:ocp_monitor

时间事件分析
14:57:41.598177new mysql sessid createdObserver 创建 MySQL 会话
14:57:41.598282client_addr_="172.20.22.213:22500"客户端源端口为 22500
14:57:41.601048MySQL LOGIN,ret=0登录成功
14:57:41.881652socket closedObserver 检测到连接关闭
14:57:41.881712kill and revert session开始清理会话
14:57:41.881812sock has error(ret=-4009)后续写响应失败
14:57:42.026932free session successfully会话资源释放完成

从登录成功到检测到 socket 关闭,间隔约 280.6 毫秒;从创建会话到关闭,间隔约 283.5 毫秒。

这不像典型的空闲连接超时,因为连接刚建立不久就断开了。不过,短连接监控程序、主动取消请求或中间网络设备行为仍然有可能造成这种现象。

2. 最重要的证据:客户端发送了 COM_QUIT

你提供的 destroy() 日志中,conn.pkt_rec_wrapper_ 记录了该连接最近的 MySQL 协议交互:

pkt_rec[13]: receive COM_QUERY
pkt_rec[14]: send PKT_RESHEAD
pkt_rec[15]: send PKT_FIELD
pkt_rec[16]: send PKT_EOF
pkt_rec[17]: send PKT_ROW
pkt_rec[18]: send PKT_EOF

pkt_rec[19]: receive COM_QUIT

这组记录说明:

  1. 客户端至少发送了三次 COM_QUERY。
  2. 最后一组查询响应记录包含 PKT_ROW 和 PKT_EOF,其中 PKT_ROW 的 pkt_num_ 为 440,说明该响应涉及多个数据包。
  3. 随后 Observer 记录到了接收 COM_QUIT,这是 MySQL 协议中客户端请求结束会话的命令。

因此,相比单纯的 TCP 异常断开,目前更有力的证据是:客户端发送了关闭会话的协议命令。

-4009 更可能是连接关闭过程中的后续错误.

用脚本关联每个 -4009 的会话信息,-4009 日志提取 Trace ID,关联同一 Trace ID 的 disconnect 日志获取 Session ID,再关联登录记录获取客户端 IP 和用户名。

#!/bin/bash

LOG="${1:-observer.log.20261019145810932}"

if [ ! -r "$LOG" ]; then
    echo "ERROR: cannot read log file: $LOG" >&2
    exit 1
fi

# 每条 -4009 提取一次,保留对应的 Trace ID
grep 'async_write_data.*errcode=-4009' "$LOG" |
while IFS= read -r line; do
    trace=$(printf '%s\n' "$line" |
        sed -n 's/.*\[\(YB[^]]*\)\].*/\1/p')

    [ -z "$trace" ] && continue

    # 从 socket 事件中提取 session_id
    sid=$(grep -F "$trace" "$LOG" |
        sed -n 's/.*session_id:\([0-9][0-9]*\).*/\1/p' |
        head -1)

    # 兜底:从 disconnect 日志提取 sessid
    if [ -z "$sid" ]; then
        sid=$(grep -F "$trace" "$LOG" |
            sed -n 's/.*disconnect(sessid=\([0-9][0-9]*\),.*/\1/p' |
            head -1)
    fi

    # 从同一 Session 的登录日志提取客户端和用户
    client="UNKNOWN"
    user="UNKNOWN"

    if [ -n "$sid" ]; then
        login=$(grep 'MySQL LOGIN' "$LOG" |
            grep -F "sessid=$sid," |
            head -1)

        if [ -n "$login" ]; then
            client=$(printf '%s\n' "$login" |
                sed -n 's/.*client_ip=\([^,]*\).*/\1/p')
            user=$(printf '%s\n' "$login" |
                sed -n 's/.*user_name=\([^,]*\).*/\1/p')
        fi
    else
        sid="UNKNOWN"
    fi

    printf '%s | sessid=%s | client_ip=%s | user=%s\n' \
        "$trace" "$sid" "$client" "$user"
done

输出如下

YB42AC1416D5-00065E1BF7ACE11C-0-0 | sessid=UNKNOWN | client_ip=UNKNOWN | user=UNKNOWN
YB42AC1416D5-00065E16E07F9269-0-0 | sessid=UNKNOWN | client_ip=UNKNOWN | user=UNKNOWN
YB42AC1416D5-00065E1BF7ACE282-0-0 | sessid=3221626349 | client_ip=172.20.22.213 | user=ocp_monitor
YB42AC1416D5-00065E16E07F92AF-0-0 | sessid=3221630296 | client_ip=172.20.22.213 | user=ocp_monitor
YB42AC1416D5-00065E16E07F92BE-0-0 | sessid=3221633928 | client_ip=172.20.22.213 | user=ocp_monitor
YB42AC1416D5-00065E1BF7ACE2E2-0-0 | sessid=3221636135 | client_ip=172.20.22.213 | user=ocp_monitor

自动提取每条 -4009 对应的上下文

#!/bin/bash

LOG="${1:-observer.log.20261019145810932}"

grep 'async_write_data.*errcode=-4009' "$LOG" |
while IFS= read -r line; do
    trace=$(printf '%s\n' "$line" |
        sed -n 's/.*\[\(YB[^]]*\)\].*/\1/p')

    [ -z "$trace" ] && continue

    echo
    echo "========== TRACE: $trace =========="

    grep -n -F "$trace" "$LOG" |
        grep -E \
        'handle_sock_event|disconnect \(obmp_packet_sender|process \(obmp_quit\.h:60\)|async_write_data.*errcode=-4009'
done

输出如下

========== TRACE: YB42AC1416D5-00065E1A005E30EA-0-0 ==========
608342:[2026-10-19 14:58:07.088637] WDIAG [RPC.OBMYSQL] handle_sock_event (ob_sql_nio.cpp:1011) [19581][sql_nio0][T0][Y0-0000000000000000-0-0] [lt=96][errcode=0] socket closed, it maybe disconnected by the client or by observer actively(mask=8197, *s={this:0x7fe4cf9a0db0, session_id:3221689375, trace_id:YB42AC1416D5-00065E1A005E30EA-0-0, sql_handling_stage:2, sql_initiative_shutdown:false, reader:{fd:233}, err:5, last_decode_time:1792393087086803, pending_write_task:{buf:null, sz:0}, need_epoll_trigger_write:false, consume_size:2993, pending_flag:1, may_handling_flag:true, handler_close_flag:false})
608344:[2026-10-19 14:58:07.088787] WDIAG [SERVER] disconnect (obmp_packet_sender.cpp:860) [20019][T1_L0_G10000][T1][YB42AC1416D5-00065E1A005E30EA-0-0] [lt=7][errcode=0] server close connection(sessid=3221689375, proxy_sessid=0, stack="0x2315fecf 0xc4138f0 0xc3d4b2b 0xc6e8b61 0x22a14916 0x22aa57d5 0xc2e3ef9 0x23243387 0x7fe58de08ea5 0x7fe58db31b0d")
608345:[2026-10-19 14:58:07.088815] INFO  [SERVER] process (obmp_quit.h:60) [20019][T1_L0_G10000][T1][YB42AC1416D5-00065E1A005E30EA-0-0] [lt=26] quit
608346:[2026-10-19 14:58:07.088837] WDIAG [RPC.OBMYSQL] async_write_data (ob_sql_sock_session.cpp:162) [20019][T1_L0_G10000][T1][YB42AC1416D5-00065E1A005E30EA-0-0] [lt=20][errcode=-4009] sock has error(ret=-4009)

========== TRACE: YB42AC1416D5-00065E1A005E30EB-0-0 ==========
608393:[2026-10-19 14:58:07.109070] WDIAG [RPC.OBMYSQL] handle_sock_event (ob_sql_nio.cpp:1011) [19581][sql_nio0][T0][Y0-0000000000000000-0-0] [lt=46][errcode=0] socket closed, it maybe disconnected by the client or by observer actively(mask=8197, *s={this:0x7fe522bfadb0, session_id:3221704166, trace_id:YB42AC1416D5-00065E1A005E30EB-0-0, sql_handling_stage:2, sql_initiative_shutdown:false, reader:{fd:225}, err:5, last_decode_time:1792393087108930, pending_write_task:{buf:null, sz:0}, need_epoll_trigger_write:false, consume_size:1330, pending_flag:1, may_handling_flag:true, handler_close_flag:false})
608395:[2026-10-19 14:58:07.109174] WDIAG [SERVER] disconnect (obmp_packet_sender.cpp:860) [20019][T1_L0_G10000][T1][YB42AC1416D5-00065E1A005E30EB-0-0] [lt=7][errcode=0] server close connection(sessid=3221704166, proxy_sessid=0, stack="0x2315fecf 0xc4138f0 0xc3d4b2b 0xc6e8b61 0x22a14916 0x22aa57d5 0xc2e3ef9 0x23243387 0x7fe58de08ea5 0x7fe58db31b0d")
608396:[2026-10-19 14:58:07.109194] INFO  [SERVER] process (obmp_quit.h:60) [20019][T1_L0_G10000][T1][YB42AC1416D5-00065E1A005E30EB-0-0] [lt=19] quit
608397:[2026-10-19 14:58:07.109202] WDIAG [RPC.OBMYSQL] async_write_data (ob_sql_sock_session.cpp:162) [20019][T1_L0_G10000][T1][YB42AC1416D5-00065E1A005E30EB-0-0] [lt=7][errcode=-4009] sock has error(ret=-4009)

Note:

可以看到统计每条 -4009 是否都有同一 Trace ID 的 handle_sock_event、disconnect 和 COM_QUIT,都是相同的顺序,可以断定这是普遍的断连模式。 都是obmonitor的客户端,本案例可以忽略报错。

Leave a Comment