【使用环境】生产环境
【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
目前从日志侧能确认:
- observer 是进程级 crash,不是普通报错;
- obdiag 明确识别到 crash 线程为 T1002_TTL_DELTE;
- 同类 crash 特征至少出现了 2 次;
- 已经生成 core 文件,可以继续做 gdb 分析。
从线程名看,怀疑问题和 TTL 删除任务有关。
结合代码初步看了一下,当前怀疑的方向主要有:
- TTL 删除路径中的对象生命周期异常,比如 last_row_、cells_、rowkey 相关对象失效;
- rowkey 拷贝、对象写入、序列化阶段的内存访问异常;
- TTL 调度和执行并发场景下,任务上下文或对象状态不一致,最终导致 crash。
当前只是初步定位到 TTL 删除线程相关,还没有结合 core 做 gdb 调用栈闭环确认。
想请教下社区:
- 有没有人遇到过 T1002_TTL_DELTE 线程 crash?
- 是否属于 4.4.2 TLS 版本里已知的 TTL 相关问题?
- 有没有已知补丁、规避方案,或者建议升级到哪个版本?
- 如果后续做 gdb 分析,除了 bt、thread apply all bt 之外,还有哪些建议重点关注?
【复现路径】
目前不是稳定复现问题,是线上运行过程中 observer 节点异常 crash 后发现的。
现场处理路径大致如下:
- 在故障节点发现 observer crash;
- 检查到 observer 已生成 core 文件;
- 从节点提取故障时段 observer 日志;
- 使用 obdiag analyze log --files observer.log.xxx 做离线分析;
- obdiag 识别 crash thread 为 T1002_TTL_DELTE;
- 目前准备继续结合 core + gdb 做进一步确认。
【附件及日志】
- core 文件已生成,大小约 8.9G;
- obdiag 版本:3.7.2;
- 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
如果社区老师有遇到过类似问题,麻烦帮忙看下大概排查方向,感谢。


