CentOS 环境下 MongoDB 内存配置技巧
一 核心原则与快速建议
storage.wiredTiger.engineConfig.cacheSizeGB 设置为略低于工作集大小,通常落在**物理内存的 40%–60%**区间,其余留给操作系统页缓存、连接栈、文件系统缓存等。若与其他服务共机,应进一步下调,避免 OOM 与抖动。二 配置步骤与关键参数
/etc/mongod.conf 中设置):storage:
dbPath: /var/lib/mongo
journal:
enabled: true
engine: wiredTiger
wiredTiger:
engineConfig:
cacheSizeGB: 8 # 依据总内存与业务工作集调整
修改后重启:sudo systemctl restart mongod。storage:
wiredTiger:
engineConfig:
eviction_dirty_target: 5
eviction_dirty_trigger: 20
db.serverStatus().wiredTiger.cachedb.serverStatus().memcacheSizeGB: 7.5(约 47%),再依据监控微调。三 CentOS 系统层优化
echo never > /sys/kernel/mm/transparent_hugepage/enabled/etc/default/grub 的 GRUB_CMDLINE_LINUX 中加入 transparent_hugepage=never,执行 grub2-mkconfig -o /boot/grub2/grub.cfg 并更新 initramfs,重启生效。vm.swappiness=0(倾向尽量避免 swap,仅在极端内存紧张时再启用少量 swap)vm.overcommit_memory=1(更宽松的超额承诺策略,降低 OOM 风险;需结合容量规划谨慎使用)sudo systemctl set-property mongod MemoryLimit=10G,适合容器化或混部场景。/etc/security/limits.conf 提升 nofile、nproc,避免连接数增长受限。四 监控与容量规划
db.serverStatus().wiredTiger.cache:查看 bytes currently in the cache、cache eviction、dirty 等关键指标db.serverStatus().mem:总体内存使用mongostat、mongotop、top/htop:实时观察吞吐、锁、I/O 与热点集合cache eviction 频繁、dirty 高企,优先考虑增加内存或优化写入模式(批量、索引覆盖、减少随机写)五 常见坑与排查清单
maxIncomingConnections,并优化应用连接池。wiredTiger.cache 的 eviction/dirty,难以定位瓶颈;建议以缓存命中与脏页为核心观测点。