基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
如何在线生成 OBServer 的堆栈信息
更新时间:2026-06-08 02:41
在诊断 OBServer 节点出现整体性能慢、OBServer hang 住,OBServer CPU 使用率持续性高或者突然飙高的问题时,需要直接分析 OBServer 节点的线程栈信息,对 observer 内核的进行进一步研究。为了可以安全快速地获取到 OBServer 节点的线程栈,OBServer 实现了通过 obstack(需要独立安装),或者是 kill -60 $observer 命令的方式以一种轻量级的方式来获取 OBServer 节点的线程栈信息的方案。
在 OBServer 中,实现了通过自定义信号量(60)以一种轻量级的方式来获取 OBServer 节点的线程栈信息。目前有两种方法轻量级的在线获取 OBServer 节点的线程堆栈信息。
obstack 工具
obstack 工具(内部也是调用的 kill -60 $observer 命令)。obstack 的优点是可以直接将线程栈的地址信息解析成函数名,并且进行简单的聚集,当需要迅速的找到 OBServer 节点所有线程的线程栈代码执行热点时,这就非常方便。 使用方法:
obstack 工具需要进行单独安装,在询问 OceanBase 数据库支持团队获得 obstack 的 rpm 包后可以直接对 obstack 进行安装。 在成功安装 obstack 工具后,在执行下面的命令捕获 OBServer 节点的线程栈,将线程栈重定向到任意文件中,例如:obstack.trc文件。
obstack -p ${pid of observer} > obstack.trc
为了能够迅速定位 observer 的热点线程栈,还可以利用 obstack 的快速聚集选项 -a 来捕获热点线程栈。
obstack -p ${pid of observer} -ao > obstack.trc
更多 obstack 选项请参考 obstack --help。
请将 obstack 输出的线程栈信息和问题复现时的 observer 日志一起打包给 OceanBase 数据库支持团队进行根因分析。
kill -60 $observer 命令
该方式生成的线程栈文件并不直接可读,需要对函数名进行进一步解析。 使用方法:
获取到 observer 进程的 pid。
[admin@lab324-ob32 oceanbase]$ ps -ef |grep observer admin 46331 1 99 Jun29 ? 75-03:26:17 /home/admin/oceanbase/bin/observer admin 87997 33666 0 15:07 pts/0 00:00:00 grep --color=auto observer执行
kill -60。[admin@lab324-ob32 oceanbase]$ kill -60 46331这一步会在 observer log 上一级目录产生一个线程栈文件(文件以 stack 开头),标准安装部署会生成在
/home/admin/oceanbase目录下。查看 stack 文件是否存在。
[admin@lab324-ob32 oceanbase]$ ls -lrt /home/admin/oceanbase/stack* -rw------- 1 admin admin 181279 Jul 24 14:55 /home/admin/oceanbase/stack.46331.202372465515
请将线程栈文件,复现时的 observer 日志以及 OBServer 节点的准确版本(可通过 observer -V 命令)打包给 OceanBase 数据库支持团队进行根因分析。
适用版本
OceanBase 数据库 V2.x、V3.x 版本。