温馨提示×

CentOS系统MongoDB的内存配置指南

小樊
46
2025-11-23 19:28:10
栏目: 云计算

CentOS 上 MongoDB 内存配置指南

一 核心概念与默认行为

  • MongoDB 在 WiredTiger 存储引擎下,缓存大小由参数 storage.wiredTiger.engineConfig.cacheSizeGB 控制;若未显式设置,WiredTiger 默认使用**可用物理内存的约 50%**作为缓存。该缓存用于加速数据/索引的读写,不等同于 MongoDB 进程的整体内存占用。操作系统还会使用一部分内存做文件系统缓存,二者叠加才是常看到的内存使用量。

二 配置步骤

  • 编辑配置文件:MongoDB 的主配置文件通常为 /etc/mongod.conf。在 storage 段设置 WiredTiger 缓存大小(单位 GB),例如设置为 4GB
    storage:
      dbPath: /var/lib/mongo
      journal:
        enabled: true
      engine: wiredTiger
      wiredTiger:
        engineConfig:
          cacheSizeGB: 4
    
    保存后重启服务使配置生效:sudo systemctl restart mongod
  • 动态参数(可选):部分查询/排序内存阈值可通过 setParameter 调整,例如:
    db.setParameter({
      internalQueryExecMaxBlockingSortBytes: 104857600,  # 100MB
      internalQueryExecMaxMemoryUsageMB: 512           # 512MB
    })
    
    注意:不同版本支持的可调参数与取值范围可能不同,请以所用版本文档为准。

三 容量规划与推荐值

  • 单实例常用做法:将 cacheSizeGB 设为“物理内存的约一半”,为操作系统和其他进程预留足够内存,避免抖动与换页。
  • 多实例/同机混部:按实例数均分可用内存,并预留充足余量(例如每实例不超过物理内存的 1/3 ~ 1/2,视负载而定)。
  • 快速参考表(示例值,需结合实际工作集与并发调优):
    物理内存 单实例建议 cacheSizeGB 说明
    8GB 3–4GB 预留 4–5GB 给 OS、连接、文件系统缓存
    16GB 7–8GB 工作集接近内存时优先扩容内存而非继续增大缓存
    32GB 14–16GB 若同机还有其他服务,适当下调
    64GB 28–30GB 结合连接数、聚合/排序负载再微调
    注:WiredTiger 缓存仅缓存数据/索引的“工作集”,并非把全部数据常驻内存。

四 系统层面优化

  • 关闭透明大页(THP):THP 易致内存碎片与延迟波动,建议关闭:
    echo never | sudo tee /sys/kernel/mm/transparent_hugepage/enabled
    echo never | sudo tee /sys/kernel/mm/transparent_hugepage/defrag
    
    为持久化,可写入 /etc/rc.local 或 systemd 的 ExecStartPre 脚本中(不同发行版路径略有差异)。
  • 调整交换倾向与内存过量使用策略:
    • 降低 vm.swappiness(如 1–10),减少换页概率;
    • 设置 vm.overcommit_memory=2 可降低内存超卖导致的风险(需评估 OOM 策略)。 示例:sudo sysctl vm.swappiness=10sudo sysctl vm.overcommit_memory=2,并写入 /etc/sysctl.conf 持久化。
  • 文件描述符与网络:
    • 提升进程可打开文件数(/etc/security/limits.conf):
      * soft nofile 65536
      * hard nofile 65536
      
    • 适度增大内核网络参数(如 net.core.somaxconnnet.ipv4.ip_local_port_range),缓解高并发连接瓶颈。
  • 容器/虚拟化场景:若运行在 cgroups/Docker/K8s 中,请使用容器/宿主机的内存限制作为上限,并在容器内按“受限内存”重新计算 cacheSizeGB,避免超出 cgroup 限额。

五 监控与验证

  • MongoDB 内置状态:
    • 查看总体内存:db.serverStatus().mem
    • 查看 WiredTiger 缓存命中与用量:db.serverStatus().wiredTiger.cache
  • 操作系统与工具:
    • 使用 mongostatmongotop 观察吞吐、锁、读写热点;
    • 使用 top/htop 观察 RSS、swap、页面错误等指标。
  • 调优提示:
    • 若发现 page faults 高、查询变慢,优先考虑增大 cacheSizeGB 或优化索引/查询;
    • 若系统频繁换页或抖动,适当降低 cacheSizeGB、提高 vm.swappiness 的保守值,或扩容内存。

0