正在运行中的 OBServer 异常退出,通过操作系统(如 ps -ef 命令)查询 observer 进程不存在。 OBServer 在退出时生成了 core dump 文件。通常生成的 core dump 文件比较大,大致是几十或者上百 GB。 需要进行应急操作以及 OBServer 的异常退出进行根因分析。
通常情况下,OBServer 可能由于无效内存访问,进程放弃等异常原因退出。一般情况下是由于 OBServer 本身的问题,或者由于操作系统或者底层的原因导致的,具体问题需要进行分析。通常情况下,如果不是硬件损坏或者操作系统的问题,需要重新拉起 observer 作为应急操作。
在 OBServer V1.x 以及 V2.2.30 BP16 之前的版本,需要直接调试 core dump 文件进行根因分析。在 OBServer V2.2.30 BP16 及以上,OBServer V2.2.7x ,OBServer 3.x 及以上的版本进行了诊断功能的增强。对于异常退出的场景,会直接在 observer.log 中打印携带 CRASH ERROR!!! 关键字的 call stack(也称 backtrace)的信息,这里包含了 OBServer 异常退出的直接原因和问题现场。
CRASH ERROR!!! sig=11, sig_code=1, sig_addr=0x42, tid=27311, tname=test_context, trace_id=Y0-0000000000000000, extra_info=((null)), lbt=0x58b9f0 0x58c00f 0x7fcb153fe61f 0x4a1342 0x9fc8fb 0x9f66f5 0x9dc80e 0x9dd097 0x9dd727 0x9e3fdf 0x9fdcd9 0x9f74eb 0x9e2c1b 0x4abcc0 0x4a801b 0x7fcb144b6444 0x4a1028 Segmentation fault (core dumped)
在分析 OBServer 异常退出产生 core dump 问题的过程中,首要的任务就是要判断是否是遇到了已知的问题。特别是当 core 文件比较大,不便传回给 OceanBase 技术支持,或者是在生产环境无法直接将文件发回给 OceanBase 技术支持时,可以先在问题现场对异常退出时的 observer 的退出信息进行初步诊断。对于诊断 OBServer 异常退出问题,最重要的是获取 OBServer 异常退出时的直接原因以及退出线程的线程栈信息。
在 OBServer V2.2.76 版本以前,需要经 OceanBase 技术支持团队获取 OBServer 的 debuginfo rpm 包,在安装或者解压后才可以有能力将 OBServer 线程的 call stack 信息翻译成可读的方法名,或者调试 core 文件。在 OBServer V2.2.76 版本之后,可以直接通过 OBServer 的可执行文件获取线程栈的 call stack 信息,或者调试 core 文件。但是需要获得更全的调试信息,仍需要直接安装 debuginfo 的包。请注意在 V2.2.76 高版本需要 gdb 9.1 以上的版本才能有效加载 debuginfo 信息。
V2.2.76 版本以前
将 observer debuginfo 的 rpm 包进行解压,需注意,需要解压与 observer 版本一一对应的版本。
rpm2cpio oceanbase-debuginfo-xxx.el7.x86_64.rpm | cpio -div将解压出的
observer.debug文件拷贝进 observer 目录,默认为/home/admin/oceanbase/bin目录。
V2.2.76 及以上版本
如果
observer.log里在进程退出时生成了CRASH ERROR!!!关键字,记录了 OBServer 线程异常退出的 call stack 重要信息 ('lbt=' 关键字后尾随的地址hex值),执行一下命令获取线程信息:addr2line -pCfe $observer $symbol_addr在获取到以上信息后请将
CRASH ERROR!!!原始信息和打印的线程栈信息发送给技术支持人员协助处理。如果还处在低版本,不具备上述信息,需要直接 debug core 文件时,可以执行以下命令。不过请注意本文是在调试 core 文件。如果是直接调试运行中的 observer,会直接影响系统的可用性。请在执行下列命令时,按照给出的命令执行。
gdb $observer $core_file示例:
gdb /home/admin/oceanbase/bin/observer core-observer-113058-1614065734在进入交互界面之后
set logging file /home/admin/oceanbase/gdb-output set logging on set pagination off set print pretty on set print elements 0 bt bt full info r info thread set logging off quit在执行 gdb 获取到关键信息后可在交互页面输入 quit 命令退出 gdb, 所有的 debug 信息会输出在 gdb-output 文件里。
输出结果 backtrace (bt) 的关键信息如下:

在信息收集成功后请将包含进程退出的直接原因(signal 信息)和线程栈信息发送给 OceanBase 技术支持。
适用版本
OceanBase 数据库 V1.x、V2.x、V3.x 版本。