児咚尘
#1
【 使用环境 】生产环境
【 OB or 其他组件 】
【 使用版本 】OceanBase Deploy: 3.1.2
【问题描述】使用 obd 部署社区版集群时,报错“ Failed to start XX.XXX.XXX observer: bash: line 1: 39763 Illegal instruction (core dumped)”
【复现路径】用 obd cluster start myobs 命令启动后,也会出现
【附件及日志】推荐使用OceanBase敏捷诊断工具obdiag收集诊断信息,详情参见链接(右键跳转查看):
【SOP系列 22 】——故障诊断第一步(自助诊断和诊断信息收集)
【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!
论坛小助手
#3
根据您提供的信息,以下是关于“Failed to start XX.XXX.XXX observer: bash: line 1: 39763 Illegal instruction (core dumped)
”问题的分析和解决方法:
问题分析
-
错误原因
报错信息中的 Illegal instruction (core dumped)
表明在启动 Observer 进程时发生了非法指令异常。这通常是由于以下原因之一导致:
-
CPU 架构不匹配:OceanBase 数据库的二进制文件可能未针对当前服务器的 CPU 架构进行优化,例如使用了更高版本的 CPU 指令集(如 AVX2),而目标服务器的 CPU 不支持这些指令。
-
编译选项问题:如果 OceanBase 的二进制文件是基于特定的编译选项生成的,可能会导致在某些硬件上无法正常运行。
-
依赖库问题:某些系统库或依赖项可能与 OceanBase 的二进制文件不兼容。
-
环境信息确认
根据您的描述,使用的是生产环境,并且 obd 版本为 3.1.2。需要进一步确认以下几点:
- 部署 OceanBase 的服务器 CPU 型号及其支持的指令集。
- 当前服务器的操作系统版本及内核版本。
- 是否使用了正确的 OceanBase 社区版二进制文件。
解决方案
方法一:检查 CPU 兼容性
-
确认 CPU 支持的指令集
在目标服务器上执行以下命令,查看 CPU 支持的指令集:
cat /proc/cpuinfo | grep flags
如果输出中包含 avx
, avx2
等高级指令集,则说明 CPU 支持这些指令。如果缺少这些指令集,可能是 OceanBase 的二进制文件使用了不兼容的指令集。
-
选择合适的二进制文件
如果确认 CPU 不支持某些高级指令集,请下载适用于低版本 CPU 的 OceanBase 社区版二进制文件。可以从 OceanBase 官方下载页面 获取适合的版本。
方法二:检查依赖库
-
验证系统依赖库
确保服务器已安装所有必要的依赖库。可以参考以下命令检查并安装缺失的依赖:
yum install -y libaio numactl-libs
-
验证动态链接库
使用 ldd
命令检查 OceanBase 二进制文件的依赖库是否完整:
ldd /path/to/observer
如果发现某些依赖库缺失,请安装对应的 RPM 包。
方法三:重新部署集群
如果确认问题是由于二进制文件或依赖库不兼容导致的,建议重新部署集群:
-
停止并清理旧集群
根据文档《清理旧集群》中的步骤,停止并卸载现有的 OceanBase 集群。具体命令如下:
ps -ef | grep observer
kill -9 `pidof observer`
rpm -qa | grep oceanbase
sudo rpm -e $rpm_name
-
重新部署集群
使用正确的二进制文件重新部署集群:
obd cluster deploy myobs -c myobs.yaml
obd cluster start myobs
方法四:启用调试模式
如果上述方法仍无法解决问题,可以启用调试模式以获取更多日志信息:
-
收集诊断信息
使用 obdiag
工具收集诊断信息:
obdiag collect log -c myobs
-
分析 core 文件
如果有 core 文件生成,可以使用 gdb
分析其内容:
gdb /path/to/observer /path/to/corefile
bt
总结
根据文档库中的信息,该问题的主要原因是 CPU 架构或依赖库不兼容。建议按照以下步骤逐步排查:
- 检查服务器 CPU 支持的指令集。
- 确认使用的 OceanBase 二进制文件是否与当前硬件兼容。
- 检查并安装必要的系统依赖库。
- 如果问题仍未解决,启用调试模式并收集更多日志信息。
如果仍有疑问,建议联系 OceanBase 的技术支持团队以获取进一步帮助。
检索到的文档如下:
- 4000 ~ 4499
- 使用 systemd 部署 OceanBase 数据库
- 清理旧集群
- 错误码
- 通过图形化界面变更组件
辞霜
#4
安装core dumped。lscpu查看下是否有avx指令集
児咚尘
#6
没有 avx 的指令集,这个要安装什么指定版本么?
辞霜
#7
目前ob是需要avx指令集进行安装和运行的。需要更换带avx指令集的cpu
论坛小助手
#8
根据您的补充信息,目标服务器的 CPU 不支持 AVX 指令集。以下是针对这种情况的具体解决方案:
问题分析
OceanBase 社区版的二进制文件默认是基于较高版本的 CPU 指令集(如 AVX2)编译的,以优化性能。如果目标服务器的 CPU 不支持这些高级指令集,则会导致 Illegal instruction (core dumped)
错误。
为了解决这个问题,需要使用 不依赖 AVX 指令集的 OceanBase 二进制文件。这类二进制文件通常被称为“通用版本”或“低指令集版本”。
解决方案
方法一:下载无 AVX 的二进制文件
-
确认 OceanBase 社区版的无 AVX 版本
OceanBase 官方提供了适用于不同 CPU 架构的二进制文件。对于不支持 AVX 的 CPU,可以选择以下版本:
-
社区版无 AVX 版本:该版本的二进制文件在编译时禁用了对 AVX 指令集的依赖,适合部署在较低版本的 CPU 上。
-
下载地址
根据文档片段中的信息,可以从以下地址下载适合的二进制文件:
在下载页面中,选择标注为“无 AVX”或“通用版本”的 RPM 包。
-
安装步骤
下载完成后,按照以下步骤安装:
rpm -ivh oceanbase-ce-*.rpm
方法二:手动编译无 AVX 的二进制文件
如果官方提供的二进制文件无法满足需求,可以尝试手动编译 OceanBase 社区版源码,并禁用 AVX 指令集。
-
获取源码
从 OceanBase 的 GitHub 仓库下载源码:
git clone https://github.com/oceanbase/oceanbase-ce.git
cd oceanbase-ce
-
配置编译选项
在编译时,通过指定编译选项禁用 AVX 指令集。例如:
cmake .. -DCMAKE_C_FLAGS="-mno-avx" -DCMAKE_CXX_FLAGS="-mno-avx"
-
编译并安装
执行以下命令完成编译和安装:
make -j$(nproc)
make install
注意事项
-
验证二进制文件的兼容性
在重新部署集群之前,请确保下载或编译的二进制文件与目标服务器的硬件和操作系统完全兼容。
-
清理旧版本
如果之前已部署过 OceanBase 集群,请先清理旧版本的二进制文件和数据目录,避免冲突。
-
测试部署
使用 obd 工具重新部署集群,并验证是否正常启动:
obd cluster deploy myobs -c myobs.yaml
obd cluster start myobs
总结
对于不支持 AVX 指令集的 CPU,建议下载官方提供的无 AVX 版本的二进制文件进行部署。如果官方未提供适用版本,可以尝试手动编译源码并禁用 AVX 指令集。请严格按照上述步骤操作,确保新版本的二进制文件与目标硬件兼容。
如果仍有疑问,建议联系 OceanBase 的技术支持团队以获取进一步帮助。
更多信息请查看:
- 软硬件要求
- strict_check_os_params
- Agent 升级检查
- 升级 Agent
- obshell 代理命令组
- 遇到问题如何向技术支持同学提问
- V3.x 与 V4.x 配置项和系统变量变更
- audit_log_compression
- 安装 obshell
- ofs_list
(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)