OceanBase 4.4.2 TLS 版本observer节点 crash,obdiag定位到T1002_TTL_DELTE 线程触发

【使用环境】生产环境

【OB or 其他组件】
OceanBase Database

【使用版本】
OceanBase 4.4.2 TLS 版本

【问题描述】
OceanBase 集群中遇到 observer 节点 crash。

现场排查时,发现 observer 进程已经生成 core 文件,大小约 8.9G,例如:

之后提取对应时段的 observer 日志,使用 obdiag 3.7.2 做离线分析,识别到 crash 线程为:
T1002_TTL_DELTE
离线分析结果中,同类 crash 特征出现了 2 次,关键信息如下:

ErrorCode: CRASH_ERROR
Message: crash thread:T1002_TTL_DELTE,T1002_TTL_DELTE
Count: 2
Cause: Internal Error

目前从日志侧能确认:

  1. observer 是进程级 crash,不是普通报错;
  2. obdiag 明确识别到 crash 线程为 T1002_TTL_DELTE;
  3. 同类 crash 特征至少出现了 2 次;
  4. 已经生成 core 文件,可以继续做 gdb 分析。

从线程名看,怀疑问题和 TTL 删除任务有关。

结合代码初步看了一下,当前怀疑的方向主要有:

  1. TTL 删除路径中的对象生命周期异常,比如 last_row_、cells_、rowkey 相关对象失效;
  2. rowkey 拷贝、对象写入、序列化阶段的内存访问异常;
  3. TTL 调度和执行并发场景下,任务上下文或对象状态不一致,最终导致 crash。

当前只是初步定位到 TTL 删除线程相关,还没有结合 core 做 gdb 调用栈闭环确认。

想请教下社区:

  1. 有没有人遇到过 T1002_TTL_DELTE 线程 crash?
  2. 是否属于 4.4.2 TLS 版本里已知的 TTL 相关问题?
  3. 有没有已知补丁、规避方案,或者建议升级到哪个版本?
  4. 如果后续做 gdb 分析,除了 bt、thread apply all bt 之外,还有哪些建议重点关注?

【复现路径】
目前不是稳定复现问题,是线上运行过程中 observer 节点异常 crash 后发现的。

现场处理路径大致如下:

  1. 在故障节点发现 observer crash;
  2. 检查到 observer 已生成 core 文件;
  3. 从节点提取故障时段 observer 日志;
  4. 使用 obdiag analyze log --files observer.log.xxx 做离线分析;
  5. obdiag 识别 crash thread 为 T1002_TTL_DELTE;
  6. 目前准备继续结合 core + gdb 做进一步确认。

【附件及日志】

  1. core 文件已生成,大小约 8.9G;
  2. obdiag 版本:3.7.2;
  3. obdiag 离线分析关键信息如下:

obdiag version: 3.7.2
analyze_log_offline start …
analyze start ok

crash_error:crash thread:T1002_TTL_DELTE
crash_error:crash thread:T1002_TTL_DELTE,T1002_TTL_DELTE

Analyze OceanBase Offline Log Summary:

Node: 127.0.0.1
Status: Completed
FileName: observer.log.xxx
ErrorCode: CRASH_ERROR
Message: crash thread:T1002_TTL_DELTE,T1002_TTL_DELTE
Count: 2

result_details.txt 中关键信息:

ErrorCode: CRASH_ERROR
Message: crash thread:T1002_TTL_DELTE,T1002_TTL_DELTE
Count: 2
Cause: Internal Error
Solution: Contact OceanBase Support

如果社区老师有遇到过类似问题,麻烦帮忙看下大概排查方向,感谢。

1 个赞