---
title: RPC 检测 hung 导致 RS 队列满-OceanBase数据库使用指南
description: 了解OceanBase数据库在实际应用中关于RPC 检测 hung 导致 RS 队列满相关的常见问题和使用技巧，帮助您快速解决RPC 检测 hung 导致 RS 队列满的难题。
image: https://mdn.alipayobjects.com/huamei_22khvb/afts/img/A*OSPzQ6GUQF4AAAAAQHAAAAgAeiGDAQ/original
---
切换语言

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

划线反馈

# RPC 检测 hung 导致 RS 队列满

更新时间：2026-06-04 09:56

适用版本： V2.2.x、V3.1.x、V3.2.x 内容类型：Troubleshoot  

## 问题现象

1. 所有的 server 操作不能在内部表生效，例如 delete server 不能删除内部表，新加的机器不能在 `__all_server` 表里看到，或者不能 `start_service_time` 大于 0。
 2. RS 的异步队列积压，可以看到提交异步队列的任务都报错 4019。
 3. 存在下线很长的机器，很多 4121 的报错。

## 问题原因

OBServer 会每隔 2s 发送一次心跳给 RS，RS 如果 10s 都没有收到这个 OBServer 的心跳，就会认为这个 OBServer 下线了。OBServer 给 RS 发心跳需要知道 RS 的位置，为了防止 OBServer 不知道 RS 的位置而导致心跳失败，RS 会在检查到有 OBServer 下线的时候，就会提交一个异步任务，任务中会推送 `rs_list` 给这个 OBServer。

如果这个 OBServer 和 RS 之间存在网络隔离，那这个 RPC 必然是会失败的，并且 `dead_socket_detection_timeout` 设置多少，这个 RPC 就会持续多少。

已知在 RS 每隔 2s 就会检查有没有 server 下线，如果存在下线 server 就会提交一个异步任务，并且不会判定异步任务是否存在。如果每个异步任务都因为 `dead_socket_detection_timeout` 设置的比较大，而耗时很久的话，长时间积累下来，异步队列就会打满，从而导致异步队列积压。

所有 OBServer 相关的操作和变更，例如 `add server`，`stop server` 等都是先修改内存，然后提交一个异步任务，在异步任务中更新内部表。

如果异步队列积压的情况，server 所有的操作都不会在内部表中被看到。

## 问题的风险及影响

1. 所有的 server 操作可以在内存中记录，但是内部表中看不到，例如 OBServer 启动后，可能 OBServer 已经 `start_service` 了，但是 `start_service_time` 汇报不到内部表中，那这个 OBServer 就会被 OCP 或者 proxy 认为没启动成功。
 2. 异步队列积压，RS 这边很多任务都是借助异步队列执行的，不确定有什么未知的风险。

## 影响租户

影响 OceanBase 数据库中的 SYS 租户，对于 Oracle 租户和 MySQL 租户无影响。

## 影响版本

OceanBase 数据库企业版 V2.2.77 GA（oceanbase-2.2.77-20210508211731）及之后版本、V3.1.2 GA（oceanbase-3.1.2-20210618150922）及之后版本、V3.2.3 GA（oceanbase-3.2.3.0-20220418212020）及之后版本、V3.2.4 GA（oceanbase-3.2.4.0-100000072022102819）及之后版本。

## 解决方法

- 解决方法一：

     - 升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库企业版 V2.2.77 BP17 Hotfix1（oceanbase-2.2.77-117010012023061611）、V2.2.77 BP17 Hotfix2（oceanbase-2.2.77-117020032023072119）、V2.2.77 BP17 Hotfix3（oceanbase-2.2.77-117030032023091117）、V2.2.77 BP17 Hotfix4（oceanbase-2.2.77-117040012023091916）、V2.2.77 BP17 Hotfix5（oceanbase-2.2.77-117050012023111617）、V2.2.77 BP17 Hotfix6（oceanbase-2.2.77-117060012024040216）、V2.2.77 BP17 Hotfix7（oceanbase-2.2.77-117070022024071510）、V2.2.77 BP19（oceanbase-2.2.77-119000122024060513）及之后版本、V3.2.3 BP11（oceanbase-3.2.3.3-111000032024070822）及之后版本、V3.2.4 BP4（oceanbase-3.2.4.4-104000052023062021）及之后版本。
 - 解决方法二：

     1. 调小 `dead_socket_detection_timeout` 是必须要做的。
     2. 然后切换 RS，或者重启 RS。（如果不可以操作 RS，只能采用非常规手段使用 `debug_sync`，让 `offlineTask` 暂时不生成，请联系 OceanBase 技术支持处理。）

## 规避方式

- 如果存在宕机的 OBServer，就尽快把 server 踢掉。
 - `dead_socket_detection_timeout` 这个配置项要尽可能的设置小一点，让 RPC 可以尽快失败掉。

Previous

[黑屏 observer 重启报错 some config setting is not valid](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000005639981)

Next

[OceanBase 启动过程中日志出现 Fail to set tenant mem limit(ret=-4002 错误的原因](https://www.oceanbase.com/knowledge-base/oceanbase-database-1000000002395931) ![有帮助](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) 咨询热线
