centos

CentOS MongoDB内存如何分配

小樊
59
2025-10-04 22:51:29
栏目: 云计算

一、理解MongoDB内存分配的核心组件
MongoDB(3.2+版本默认使用WiredTiger存储引擎)的内存分配主要围绕WiredTiger缓存操作系统内存管理展开。其中,WiredTiger缓存是MongoDB内存使用的核心,用于缓存数据和索引,直接影响查询性能;操作系统层面需调整swap、内存超额分配等参数,避免内存压力导致系统不稳定。

二、WiredTiger缓存大小设置(关键参数)
WiredTiger缓存的大小通过storage.wiredTiger.engineConfig.cacheSizeGB参数控制,单位为GB。推荐设置为服务器可用内存的60%-80%(可用内存=总内存-系统预留内存,如系统自身运行、其他服务所需内存)。例如:

三、配置文件修改步骤

  1. 定位配置文件:MongoDB配置文件通常位于/etc/mongod.conf(若为容器化部署,需进入容器修改对应配置文件)。
  2. 编辑配置文件:使用文本编辑器(如vinano)打开mongod.conf,找到storage部分,添加或修改wiredTiger.engineConfig.cacheSizeGB参数。示例如下:
    storage:
      dbPath: /var/lib/mongo  # 数据存储路径(无需修改)
      journal:
        enabled: true         # 日志功能(建议开启)
      wiredTiger:
        engineConfig:
          cacheSizeGB: 10     # 设置缓存大小为10GB
    
  3. 保存并退出:修改完成后保存文件(vi中按:wq)。

四、操作系统级别优化

  1. 禁用透明大页(THP):THP会导致内存碎片化,影响MongoDB性能。执行以下命令禁用:
    echo never > /sys/kernel/mm/transparent_hugepage/enabled
    echo never > /sys/kernel/mm/transparent_hugepage/defrag
    
    持久化设置:将上述命令添加到/etc/rc.local文件中(需赋予执行权限chmod +x /etc/rc.local)。
  2. 调整swappinessvm.swappiness参数控制系统使用交换空间的倾向,建议设置为1(范围0-100,值越小越倾向于使用物理内存)。执行以下命令:
    echo 1 | sudo tee /proc/sys/vm/swappiness
    echo "vm.swappiness = 1" >> /etc/sysctl.conf  # 持久化设置
    sudo sysctl -p  # 使配置生效
    
  3. 调整内存超额分配vm.overcommit_memory参数控制内核是否允许内存超额分配,建议设置为1(允许超额分配,避免MongoDB因内存申请失败而崩溃)。执行以下命令:
    echo 1 | sudo tee /proc/sys/vm/overcommit_memory
    echo "vm.overcommit_memory = 1" >> /etc/sysctl.conf  # 持久化设置
    sudo sysctl -p  # 使配置生效
    

五、验证配置生效

  1. 重启MongoDB服务:修改配置后,重启服务使更改生效:
    sudo systemctl restart mongod
    
  2. 查看内存使用情况:通过MongoDB shell执行以下命令,查看WiredTiger缓存的当前使用情况:
    mongo --eval 'db.serverStatus().wiredTiger.cache'
    
    输出结果中的bytes dirty(脏页数量)、bytes valid(有效缓存数量)、maximum bytes configured(配置的最大缓存大小)等指标,可验证缓存设置是否生效。

六、注意事项

0
看了该问题的人还看了