已分配内存平台显示不正确

【 使用环境 】测试环境
【 OB or 其他组件 】OB
【 使用版本 】版本号: 4.3.2-20241012145836
【问题描述】1. 底层分配的内存15G
image
2. 参数设置memory_limit_percentage=90
3. 界面显示只有8.83G
image
请问有过这样的问题吗,有的话应该怎样处理呢?使用的是CentOS Stream release 9系统
【复现路径】问题出现前后相关操作
【附件及日志】无

【备注】基于 LLM 和开源文档 RAG 的论坛小助手已开放测试,在发帖时输入 [@论坛小助手] 即可召唤小助手,欢迎试用!

根据文档库中的信息,您的问题可能是由于 memory_limit_percentage 参数配置与实际物理内存之间的计算差异导致的。具体来说:

  1. 参数配置与实际内存计算

    • 您提到底层分配的内存为 15 GB,并且设置了 memory_limit_percentage=90
    • 根据文档片段 2 的描述,memory_limit_percentage 参数配置表示 OceanBase 数据库占系统总内存的比例。因此,按照 90% 计算,OceanBase 数据库的内存上限应该是 15 GB * 90% = 13.5 GB。
  2. 界面显示的内存

    • 您提供的图片显示,系统中实际使用的内存为 8.83 GB。这与您期望的 13.5 GB 有较大差异。
  3. 可能的原因

    • 系统内部内存:根据文档片段 6 的描述,OceanBase 数据库内存上限中配置的内存并不能全部分配给租户使用,因为每个 OBServer 上租户都会共享部分资源或功能。这些共享的资源或功能所使用的内存并不属于任何一个普通租户,而是归结为系统内部内存。系统内部可使用的内存上限可通过 system_memory 参数来配置。
    • 内存分配机制:根据文档片段 5 的描述,OceanBase 数据库在启动时会需要加载大约几个 GB 的内存,在运行过程中会逐渐按需进一步申请内存直至 memory_limit。而一旦 OBServer 节点向 OS 进行了内存申请,通常是不会释放或者返回给 OS,而是会维护在内存管理的使用列表和 Free List 当中。
  4. 解决方案

    • 检查 system_memory 参数:确保 system_memory 参数配置合理。例如,假设 system_memory 的值为 2 GB,那么可用于租户分配的内存就是 13.5 GB - 2 GB = 11.5 GB。您可以使用以下 SQL 语句查看当前的 system_memory 配置:
      obclient> SHOW PARAMETERS LIKE 'system_memory';
      
    • 调整 memory_limit 参数:如果您希望更精确地控制内存分配,可以直接设置 memory_limit 参数。例如,将 memory_limit 设置为 13.5 GB:
      obclient> ALTER SYSTEM SET memory_limit = '13.5G';
      
  5. 验证

    • 在调整参数后,重新检查系统的内存使用情况,确保内存分配符合预期。

如果以上方法仍然无法解决问题,建议您联系 OceanBase 的技术支持团队,以便获得更详细的帮助和指导。

详情请参考:

  1. 数据库内存上限
  2. 内存相关参数
  3. 产品 FAQ
  4. 系统内部内存管理
  5. 在您开始前
  6. global_write_halt_residual_memory
  7. memory_limit
  8. ODP 端故障

ocp上显示的么?

是使用的OCP,并且system_memory参数使用的是默认配置30G。@论坛小助手

根据您提供的信息,system_memory 参数使用的是默认配置 30 GB,而底层分配的内存为 15 GB,这可能导致内存不足的问题。以下是详细的分析和解决方案:

分析

  1. system_memory 参数

    • system_memory 参数用于设置系统预留给租户 ID 为 500 的租户的内存容量。默认值为 30 GB。
    • 这部分内存是系统内部内存,不能分配给普通租户使用。
  2. 内存分配

    • 您提到底层分配的内存为 15 GB,而 system_memory 设置为 30 GB,这显然超过了实际可用的内存。
    • 因此,系统可能会显示不正确的内存使用情况,因为 system_memory 占用了大部分甚至超过了实际可用的内存。

解决方案

  1. 调整 system_memory 参数

    • 为了确保系统正常运行,您需要将 system_memory 参数调整为一个合理的值,使其不超过实际可用的内存。
    • 假设您希望系统内部内存占用 2 GB,可以使用以下 SQL 语句调整 system_memory 参数:
      obclient> ALTER SYSTEM SET system_memory = '2G';
      
  2. 验证内存使用情况

    • 在调整 system_memory 参数后,重新检查系统的内存使用情况,确保内存分配符合预期。
    • 您可以使用以下命令查看系统的内存使用情况:
      free -h
      
  3. 检查 OCP 界面

    • 登录 OCP 管控平台,检查集群概览界面的资源水位,确认已分配内存是否显示正确。

步骤总结

  1. 调整 system_memory 参数

    obclient> ALTER SYSTEM SET system_memory = '2G';
    
  2. 验证内存使用情况

    free -h
    
  3. 检查 OCP 界面

    • 登录 OCP 管控平台,检查集群概览界面的资源水位。

参考文档

通过以上步骤,您应该能够解决已分配内存显示不正确的问题。如果问题仍然存在,建议您联系 OceanBase 的技术支持团队,以便获得更详细的帮助和指导。

检索到的文档如下:

  1. 磁盘及目录规划
  2. 主机规划
  3. 修改系统参数
  4. 内存
  5. 常见监控指标问题
  6. system_memory
  7. 内存相关参数
  8. memory_limit_percentage
  9. auto_split_tablet_size
  10. range_optimizer_max_mem_size

(小助手的答复已结束,如未能解决您的问题,请继续提问并等待其他同学的回复,谢谢!)

OCP上显示的内存是memory_limit - system_memory的,或者是机器内存*memory_limit_percentage - system_memory

是这样的,这里去除了system_memory,楼上回答是对的