基于湖库一体架构,统一管理结构化、半结构化与非结构化等多模态数据,一个系统承载事务处理、实时分析与 AI 工作负载。
vm.max_map_count 参数设置错误导致 OBServer 频繁被 OOM
更新时间:2026-08-25 02:41
问题现象
OBServer 进程被频繁 OOM Kill。通过 grep -i "oops" 或 grep "CHUNK_MGR" 查看日志,可以看到 virtual_memory_used 非常高,远高于物理内存。其中 OceanBase 4.x 版本发生最多,其他版本可能也适用。
问题原因
OBServer 服务器的操作系统参数 vm.max_map_count 设置不满足要求:
sysctl -a | grep max_map_count
输出结果:
vm.max_map_count = 65530
vm.max_map_count 控制进程可分配的虚拟内存区域(virtual_memory_area)的数量。当不连续的虚拟内存区域数量超过该值时,后续的内存分配就可能失败。
当前环境 vm.max_map_count=65530,远低于最佳实践值 655360。按 OBServer 一次内存申请为 2M 的粒度来估算,最差情况下申请 128G 内存就会达到 65530 个虚拟内存区域。该环境的实际内存占用是 600G+,已经远超 128G。
关键信息
暂无额外诊断信息。通过检查 vm.max_map_count 参数值和日志中的 virtual_memory_used 即可判断。
问题的风险及影响
OBServer 进程被频繁 OOM Kill,导致数据库服务中断。
影响租户
该 OBServer 节点上的所有租户均受影响。
适用版本
OceanBase 所有版本。
解决方法
永久修改此参数,将 vm.max_map_count 设置为 655360:
echo "vm.max_map_count=655360" >> /etc/sysctl.conf
sysctl -p
修改后重启 OBServer。
规避方式
确保 vm.max_map_count 参数设置为推荐值 655360。