首批通过分布式安全可靠测评,为关键业务系统打造
重启 OBServer 失败报错 -4013
更新时间:2026-06-08 02:41
问题现象
该问题由重启 OBServer 触发,表现是启动失败,日志中报错 -4013,具体报错信息参考:关键诊断信息 中的 事后诊断 章节。
关键诊断信息
触发条件
集群中租户数量过多 + 重启。
说明
多少租户算过多?,跟版本有关。以 V3.2.3 版本为例,每多一个租户,init_config 阶段就会多耗 15MB 内存;V3.2.x 版本上,该数据是 16MB。因为除租户配置项实例外的其它结构也会占内存,因此预估生产环境租户数达 250+ 就很有可能触发该问题。V4.2.0 及之后的版本,对配置项内存做了优化,单个租户配置项内存占用在 5MB 以下,触发该问题的概率进一步降低。
事前巡检
执行 strings path_to_oceanbase/etc/observer.config.bin 命令,查看结果中类似 [1001]、[1002] 这样用 [] 括起来的租户 ID 有多少个,如果超过 250 个,触发该问题的概率就比较高了。建议设法减少租户数量,或升级到带 Hotfix 的版本。
注意
250 只是一个估计值,租户数不超250不表示不会触发该问题。而且,租户数量过多也可能引发其它问题,保险起见,建议生产环境将单个集群的租户数量控制在 100 以内。
事后诊断
如果以下三点全部命中,基本可以确定是命中了该问题。
执行
strings path_to_oceanbase/etc/observer.config.bin命令,查看结果中类似[1001]、[1002]这样用[]括起来的租户 ID 有多少个,如果有一两百个,有可能触发该问题,需结合下面两点进一步判定。看 OBServer 启动阶段是否报 -4013 的日志,通过过滤关键词,命令如下。
grep "ob_server.cpp" observer.log | grep "\-4013"如果有,还需要结合日志和源代码,确定 -4013 是在
init_pre_setting()被调用前报的(init_pre_setting()是在ObServer::init中调用的)。通过过滤关键词,命令如下。
grep "\[OOPS" observer.log | grep "server_limit"需确定
server_limit值为4294967296。
如果以上三点全部命中,基本可以确定是命中了该问题。
问题原因
OBServer 刚启动,还没刷到户配置的或者自适应的 memory_limit 之前,该限制是 4GB(hardcode)。OBServer 重启时,init_config 模块会根据配置项持久化文件 etc/observer.config.bin 来生成租户配置项实例 ObTenantConfig,每个租户都会对应一个实例。如果租户数量足够多,总体占用内存会达到 4GB 限制,进而导致报 -4013,启动失败。
问题的风险及影响
OBServer 重启失败,集群不可用。
影响租户
影响 OceanBase 数据库中的 SYS 租户和 Oracle 租户以及 MySQL 租户。
影响版本
OceanBase 数据库企业版 V3.2.3 GA(oceanbase-3.2.3.0-20220419)及之后版本、V3.2.4 GA(oceanbase-3.2.4.0-100000072022102819)及之后版本、V4.1.0 GA(oceanbase-4.1.0.0-100001122023040322)及之后版本、V4.2.1 GA(oceanbase-4.2.1.0-100000182023092722)及之后版本。
解决方法
解决方法一:
升级至问题已修复版本。目前已修复的版本包括 OceanBase 数据库企业版 V3.2.3 BP10 Hotfix7(oceanbase-3.2.3.3-110070012024012316)、V3.2.3 BP10 Hotfix8(oceanbase-3.2.3.3-110080012024022713)、V3.2.3 BP10 Hotfix9(oceanbase-3.2.3.3-110090012024041611)、V3.2.3 BP10 Hotfix10(oceanbase-3.2.3.3-110100012024042814)、V3.2.3 BP10 Hotfix11(oceanbase-3.2.3.3-110110012024052720)、V3.2.3 BP10 Hotfix12(oceanbase-3.2.3.3-110120012024060510)、V3.2.3 BP10 Hotfix13(oceanbase-3.2.3.3-110130012024061819)、V3.2.3 BP10 Hotfix14(oceanbase-3.2.3.3-110140012024082010)、V3.2.3 BP10 Hotfix15(oceanbase-3.2.3.3-110150012024102111)、V3.2.3 BP10 Hotfix16(ceanbase-3.2.3.3-110160012025021315)、V3.2.3 BP10 Hotfix17(oceanbase-3.2.3.3-110170012025032112)、V3.2.3 BP10 Hotfix18(oceanbase-3.2.3.3-110180012025060316)、V3.2.3 BP10 Hotfix19(oceanbase-3.2.3.3-110190022025082615)、V3.2.3 BP10 Hotfix20(oceanbase-3.2.3.3-110200012025111317)、V3.2.3 BP11(oceanbase-3.2.3.3-111000032024070822)、V3.2.4 BP8(oceanbase-3.2.4.8-108000142024041520)、V4.2.1 BP3(oceanbase-4.2.1.3-103000052023122809)。
解决方法二:
查看
etc/observer.config.bin文件,找出启动相关的关键配置项(data_dir、rootservice_list等),拼接出启动命令行,这一步可以参考官方有关部署数据库中有关命令行部署的内容。删除
etc/observer.config.bin文件,然后使用启动命令行黑屏拉起 OBServer。
规避方式
避免在集群上创建过多的租户。建议租户数量不要超过 100 个,因为租户数量过多也可能触发其它问题。