【 使用环境 】测试环境
【 OB or 其他组件 】OB
【 使用版本 】版本号: 4.3.2-20241012145836
【问题描述】1. 底层分配的内存15G
2. 参数设置memory_limit_percentage=90
3. 界面显示只有8.83G
请问有过这样的问题吗,有的话应该怎样处理呢?使用的是CentOS Stream release 9系统
【复现路径】问题出现前后相关操作
【附件及日志】无
【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!
论坛小助手
#3
根据文档库中的信息,您的问题可能是由于 memory_limit_percentage
参数配置与实际物理内存之间的计算差异导致的。具体来说:
-
参数配置与实际内存计算:
- 您提到底层分配的内存为 15 GB,并且设置了
memory_limit_percentage=90
。
- 根据文档片段 2 的描述,
memory_limit_percentage
参数配置表示 OceanBase 数据库占系统总内存的比例。因此,按照 90% 计算,OceanBase 数据库的内存上限应该是 15 GB * 90% = 13.5 GB。
-
界面显示的内存:
- 您提供的图片显示,系统中实际使用的内存为 8.83 GB。这与您期望的 13.5 GB 有较大差异。
-
可能的原因:
-
系统内部内存:根据文档片段 6 的描述,OceanBase 数据库内存上限中配置的内存并不能全部分配给租户使用,因为每个 OBServer 上租户都会共享部分资源或功能。这些共享的资源或功能所使用的内存并不属于任何一个普通租户,而是归结为系统内部内存。系统内部可使用的内存上限可通过
system_memory
参数来配置。
-
内存分配机制:根据文档片段 5 的描述,OceanBase 数据库在启动时会需要加载大约几个 GB 的内存,在运行过程中会逐渐按需进一步申请内存直至
memory_limit
。而一旦 OBServer 节点向 OS 进行了内存申请,通常是不会释放或者返回给 OS,而是会维护在内存管理的使用列表和 Free List
当中。
-
解决方案:
-
验证:
- 在调整参数后,重新检查系统的内存使用情况,确保内存分配符合预期。
如果以上方法仍然无法解决问题,建议您联系 OceanBase 的技术支持团队,以便获得更详细的帮助和指导。
详情请参考:
- 数据库内存上限
- 内存相关参数
- 产品 FAQ
- 系统内部内存管理
- 在您开始前
- global_write_halt_residual_memory
- memory_limit
- ODP 端故障
是使用的OCP,并且system_memory参数使用的是默认配置30G。@论坛小助手
论坛小助手
#7
根据您提供的信息,system_memory
参数使用的是默认配置 30 GB,而底层分配的内存为 15 GB,这可能导致内存不足的问题。以下是详细的分析和解决方案:
分析
-
system_memory
参数:
-
system_memory
参数用于设置系统预留给租户 ID 为 500 的租户的内存容量。默认值为 30 GB。
- 这部分内存是系统内部内存,不能分配给普通租户使用。
-
内存分配:
- 您提到底层分配的内存为 15 GB,而
system_memory
设置为 30 GB,这显然超过了实际可用的内存。
- 因此,系统可能会显示不正确的内存使用情况,因为
system_memory
占用了大部分甚至超过了实际可用的内存。
解决方案
-
调整 system_memory
参数:
-
验证内存使用情况:
- 在调整
system_memory
参数后,重新检查系统的内存使用情况,确保内存分配符合预期。
- 您可以使用以下命令查看系统的内存使用情况:
free -h
-
检查 OCP 界面:
- 登录 OCP 管控平台,检查集群概览界面的资源水位,确认已分配内存是否显示正确。
步骤总结
-
调整 system_memory
参数:
obclient> ALTER SYSTEM SET system_memory = '2G';
-
验证内存使用情况:
free -h
-
检查 OCP 界面:
- 登录 OCP 管控平台,检查集群概览界面的资源水位。
参考文档
通过以上步骤,您应该能够解决已分配内存显示不正确的问题。如果问题仍然存在,建议您联系 OceanBase 的技术支持团队,以便获得更详细的帮助和指导。
检索到的文档如下:
- 磁盘及目录规划
- 主机规划
- 修改系统参数
- 内存
- 常见监控指标问题
- system_memory
- 内存相关参数
- memory_limit_percentage
- auto_split_tablet_size
- range_optimizer_max_mem_size
(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)
OCP上显示的内存是memory_limit - system_memory的,或者是机器内存*memory_limit_percentage - system_memory
旭辉
#10
是这样的,这里去除了system_memory,楼上回答是对的