oceanbase-v4.1.0运行遇到CRASH ERROR!!

【 使用环境 】测试环境
【 OB or 其他组件 】observer
【 使用版本 】v4.1.0_CE_BP4_HF1
【问题描述】运行obd demo失败,observer启动失败
【复现路径】
【附件及日志】CRASH ERROR!!! IP=ffffffffffffffff, RBP=ffffffffffffffff, sig=11, sig_code=1, sig_addr=1412d178, RLIMIT_CORE=unlimited, timestamp=1735801992251126, tid=154892, tname=TsMgr, trace_id=0-0-0-0, extra_info=((null)), lbt=, SQL=

observer.log (6.8 MB)

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

根据文档库中的信息,对于您遇到的 observer 启动失败的问题,可能涉及多个错误码。从您提供的日志来看,这是一个崩溃错误(CRASH ERROR),通常这可能是由多种原因引起的,包括但不限于内部组件或服务初始化失败、网络问题等。

可能的原因及解决方法

  1. 内部组件或服务初始化失败

    • 根据文档,错误码 4395 和 4393 都表示 observer 进程启动时内部组件或服务初始化失败。这类问题通常需要技术支持人员协助排查。
      • 建议:请检查您的环境配置是否正确,并确保所有依赖的服务都正常运行。如果问题依旧存在,请联系 OceanBase 的技术支持团队获取进一步的帮助。
  2. 网络断开导致监听服务启动失败

    • 错误码 4004 表示由于网络断开导致监听服务启动失败。您可以尝试更换空闲端口后重启 observer 进程。
      • 解决方式:请更换空闲端口后重启 observer 进程。
  3. 进程收到终止信号

    • 如果在数据库重启过程中,observer 进程收到了如 kill -15 等信号,可能会导致进程退出并记录相应的错误码。这种情况下,重新启动进程即可解决问题。
      • 解决方式:重新启动 observer 进程。

具体操作步骤

  • 检查日志文件:首先,仔细查看 observer.log 文件中的详细错误信息,以确定具体的错误码和上下文。
  • 验证环境配置:确保所有依赖的服务(如网络、存储等)都正常工作,并且没有冲突的端口。
  • 尝试重新启动:按照上述建议进行相应的操作后,尝试重新启动 observer 进程。
  • 联系支持:如果问题仍然无法解决,请联系 OceanBase 的技术支持团队,提供详细的日志信息以便他们能够更好地帮助您。

参考文档

希望以上信息能帮助您解决问题。如果有更多疑问或需要进一步的帮助,请随时告知。

具体信息可参考以下文档:

  1. 4000 ~ 4499
  2. 6000 ~ 6999
  3. 4500 ~ 4999
  4. 0001 ~ 3999
  5. ob_error

这是gdb中的显示
(gdb) bt
#0 0x000000001412d178 in ?? ()
#1 0x000000aab7afc2f4 in oceanbase::transaction::ObGtsSource::get_gts_leader_ (this=0x55d59900b0, leader=…) at ./src/storage/tx/ob_gts_source.cpp:535
#2 0x000000aab7afb998 in oceanbase::transaction::ObGtsSource::refresh_gts_ (this=0x55d59900b0, need_refresh=false) at ./src/storage/tx/ob_gts_source.cpp:592
#3 0x000000aaaf13eee8 in oceanbase::transaction::ObGtsSource::refresh_gts (this=0x55d59900b0, need_refresh=false) at ./src/storage/tx/ob_gts_source.cpp:512
#4 0x000000aab7ab06d0 in oceanbase::transaction::ObGtsRefreshFunctor::operator() (this=0x55b26dcb10, gts_tenant_info=…, ts_source_info=0x55d5990030) at ./src/storage/tx/ob_ts_mgr.h:165
#5 0x000000aab7ab05cc in oceanbase::common::ObLinkHashMap<oceanbase::common::ObIntWarp, oceanbase::transaction::ObTsSourceInfo, oceanbase::transaction::ObTsSourceInfoAlloc, oceanbase::common::RefHandle, 8l>::Ha
ndleOnoceanbase::transaction::ObGtsRefreshFunctor::operator() (this=0x55b26dca30, key=…, value=0x55d5990030) at ./deps/oblib/src/lib/hash/ob_link_hashmap.h:479
#6 0x000000aab7ab0510 in oceanbase::common::ObLinkHashMap<oceanbase::common::ObIntWarp, oceanbase::transaction::ObTsSourceInfo, oceanbase::transaction::ObTsSourceInfoAlloc, oceanbase::common::RefHandle, 8l>::ma
p<oceanbase::common::ObLinkHashMap<oceanbase::common::ObIntWarp, oceanbase::transaction::ObTsSourceInfo, oceanbase::transaction::ObTsSourceInfoAlloc, oceanbase::common::RefHandle, 8l>::HandleOn<oceanbase::transa
ction::ObGtsRefreshFunctor> > (this=0xaac15b4500 oceanbase::transaction::ObTsMgr::get_instance_inner()::instance+128, fn=…) at ./deps/oblib/src/lib/hash/ob_link_hashmap.h:357
#7 0x000000aab795e870 in oceanbase::common::ObLinkHashMap<oceanbase::common::ObIntWarp, oceanbase::transaction::ObTsSourceInfo, oceanbase::transaction::ObTsSourceInfoAlloc, oceanbase::common::RefHandle, 8l>::fo
r_eachoceanbase::transaction::ObGtsRefreshFunctor (this=0xaac15b4500 oceanbase::transaction::ObTsMgr::get_instance_inner()::instance+128, fn=…) at ./deps/oblib/src/lib/hash/ob_link_hashmap.h:368
#8 0x000000aaaf13eac4 in oceanbase::transaction::ObTsMgr::run1 (this=0xaac15b4480 oceanbase::transaction::ObTsMgr::get_instance_inner()::instance) at ./src/storage/tx/ob_ts_mgr.cpp:271
#9 0x000000aabcb31eec in oceanbase::lib::Threads::run (this=0xaac15b4480 oceanbase::transaction::ObTsMgr::get_instance_inner()::instance, idx=0) at ./deps/oblib/src/lib/thread/threads.cpp:205
#10 0x000000aabcb2e138 in oceanbase::lib::thread::run (this=0x559433dac0) at ./deps/oblib/src/lib/thread/thread.cpp:164
#11 0x000000aabcb2d934 in oceanbase::lib::thread::__th_start (arg=0x559433dac0) at ./deps/oblib/src/lib/thread/thread.cpp:311
#12 0x000000555567c804 in start_thread (arg=) at pthread_create.c:486
#13 0x00000055557fb10c in __thread_start () from /lib64/libc.so.6

根据您提供的 gdb 回溯信息,崩溃发生在 oceanbase::transaction::ObGtsSource::get_gts_leader_ 函数中。具体来说,错误发生在 ob_gts_source.cpp 文件的第 535 行。这表明在获取全局事务服务(GTS)领导者时发生了问题。

分析与建议

  1. GTS 领导者获取失败

    • 原因:GTS 是 OceanBase 中用于提供全局时间戳服务的关键组件。如果 GTS 领导者无法正常选举或通信中断,可能会导致 observer 进程崩溃。
    • 解决方法
      • 检查集群中的 GTS 组件是否正常运行。
      • 确认网络连接是否稳定,确保所有节点之间的通信没有问题。
      • 查看其他相关日志文件(如 rootservice.logelection.log),以确定是否有 GTS 领导者选举失败或其他相关错误。
  2. 内存访问异常

    • 原因:从 gdb 回溯信息来看,崩溃发生在未知地址 0x000000001412d178,这可能是由于非法内存访问引起的。
    • 解决方法
      • 使用 addr2line 工具将崩溃地址转换为源代码行号,以便更准确地定位问题。
      • 检查是否存在内存泄漏或未初始化的指针问题。可以参考文档片段 1 中提到的方法来排查内存泄漏问题:
        obclient> select * from __all_virtual_mem_leak_checker_info order by alloc_count desc;
        
      • 如果怀疑是内存管理问题,可以尝试使用 Valgrind 或 AddressSanitizer 等工具进行进一步调试。
  3. 版本兼容性问题

    • 原因:您使用的版本是 v4.1.0_CE_BP4_HF1,可能存在某些已知的 bug 或不稳定性。
    • 解决方法
      • 检查是否有更新的补丁或版本发布,特别是针对 GTS 相关的问题。
      • 如果可能,尝试升级到最新版本的社区版,以获得更好的稳定性和性能。

具体操作步骤

  1. 检查 GTS 状态

    • 登录到 OCP 或使用 obclient 查询 GTS 的状态:
      obclient> SELECT * FROM oceanbase.__all_zone WHERE zone_type = 'GTS';
      
  2. 查看相关日志

    • 检查 rootservice.logelection.log 文件,寻找有关 GTS 领导者选举的信息。
    • 关注是否有任何关于网络连接或 GTS 服务的异常记录。
  3. 使用 addr2line 定位问题

    • 将崩溃地址转换为源代码行号:
      addr2line -pCfe bin/observer 0x1412d178
      
  4. 升级或打补丁

参考文档

希望以上信息能帮助您解决问题。如果有更多疑问或需要进一步的帮助,请随时告知。

检索到的文档如下:

  1. 内存问题诊断
  2. 监测历史会话性能

(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)

现在集群恢复了吗,恢复了拿obdiag 巡检一下把巡检报告拿回来看看。https://www.oceanbase.com/docs/common-obdiag-cn-1000000001768218

看一下有没有core文件生成

  1. 查看 core 文件的目录模式。
sysctl -a | grep pattern

输出结果如下:

kernel.core_pattern = /data/core-%e-%p-%t
  1. 显示当前目录内文件的详细属性信息。
ll /

输出结果如下:

total 56
rwxrwxrwx    1 root root    7 Jun  2  2017 bin -> usr/bin
dr-xr-xr-x    1 root root 4096 Nov 14  2019 boot
drwxr-xr-x    4 root root 4096 Jun 15 21:10 data

尝试几种方法,core文件没有生成,目前能参考的有observer.log和使用gdb observer能够看到一些信息,请问下,还有什么方法能够定位问题吗?使用的是loongarch64架构。或者我将编译好的二进制提供下?

没有启动起来,这个obdiag无法使用吧

没启动起来的话,obdiag 只能用离线的日志分析了。
obdiag analyze log --files xxxx.log 分析下之前的日志看看能不能有啥发现的

不好意思 loongarch不支持obV4的 可能没有办法给你提供编译好的二进制

我这边编译出来了observer的二进制,现在运行出错,看能否帮忙看下问题出在哪了,coredump文件已经生成了,文件有点大,这个交流网站能上传3G左右的文件吗

使用obdiag analyze log看了下日志,貌似没有什么有用的信息, 信息如下:
obdiag analyze log --files ./observer.log
analyze_log_offline start …
[WARN] No time option provided, default processing is based on the last 30 minutes
analyze log from_time: 2025-01-06 13:50:28, to_time: 2025-01-06 14:21:28

FileListInfo:
±----------±-------------------+
| Node | LogList |
+===========+====================+
| 127.0.0.1 | [’./observer.log’] |
±----------±-------------------+

Analyze OceanBase Offline Log Summary:

±----------±---------±-----------±------------±----------±--------+
| Node | Status | FileName | ErrorCode | Message | Count |
+===========+==========+============+=============+===========+=========+
| 127.0.0.1 | PASS | | | | |
±----------±---------±-----------±------------±----------±--------+
For more details, please run cmd ’ cat /home/aqz/test/log/analyze_pack_20250106142028/result_details.txt ’

不好意思 主要目前ob4.0没有对loongarch的支持 我也问了其他同学 目前没有办法排查 建议更换其他的支持ob操作系统

行吧,感谢,请问下,咱们官方这边有添加loongarch架构的计划吗,我这边可以提供编译环境和对应的patch

暂时没有收到相关的通知 你可以关注ob版本发布 会有说明