MongoDB在Ubuntu上的内存分配配置指南
MongoDB默认使用WiredTiger存储引擎(Ubuntu环境下推荐),其内存分配主要通过storage.wiredTiger.engineConfig.cacheSizeGB参数控制。该参数定义了WiredTiger引擎可使用的最大内存量(单位:GB),直接影响数据库的缓存效率与性能。
打开配置文件
使用文本编辑器(如nano)编辑MongoDB主配置文件:
sudo nano /etc/mongod.conf 修改内存参数
在storage section下添加或修改wiredTiger配置,设置cacheSizeGB。例如,若系统有8GB内存,建议分配4-6GB给MongoDB(占系统内存的50%-75%):
storage: engine: wiredTiger wiredTiger: engineConfig: cacheSizeGB: 4 # 根据系统内存调整,避免超过70% 保存并重启服务
修改完成后,按Ctrl+X→Y→Enter保存文件,然后重启MongoDB使配置生效:
sudo systemctl restart mongod 验证配置生效
连接到MongoDB Shell,执行以下命令查看WiredTiger缓存状态:
db.serverStatus().wiredTiger.cache 输出中的bytes currently in the cache字段表示当前使用的缓存大小,确认是否符合预期。
比例原则
WiredTiger缓存大小建议设置为系统总内存的50%-70%(如8GB内存分配4-6GB)。需预留足够内存给操作系统(如内核、其他进程)及MongoDB的非缓存操作(如排序、聚合)。
避免过度分配
若cacheSizeGB超过系统可用内存,会导致频繁的内存交换(swap),反而降低性能。建议通过free -h命令查看系统剩余内存,合理调整。
系统内存预留
操作日志(oplog)大小
oplogSizeMB参数控制复制集操作日志的大小(单位:MB),影响复制延迟与故障恢复能力。默认值为磁盘空间的5%(约50GB),可根据复制需求调整:
replication: oplogSizeMB: 1024 # 设置为1GB 慢查询分析
开启操作分析以识别慢查询,帮助优化内存使用:
operationProfiling: mode: slowOp # 记录慢查询 slowOpThresholdMs: 100 # 慢查询阈值为100ms 禁用不必要的功能
若无需本地主机认证,可关闭enableLocalhostAuthBypass以减少内存开销:
setParameter: enableLocalhostAuthBypass: false 实时监控工具
使用top、htop或mongostat监控MongoDB进程的内存使用情况,重点关注RES(常驻内存)和%MEM(内存占用百分比)。
第三方工具
推荐使用**Percona Monitoring and Management (PMM)**进行深度监控,分析内存瓶颈(如缓存命中率、内存泄漏)。
定期调整
根据业务增长(如数据量增加、查询复杂度提高)或系统资源变化(如新增内存),定期重新评估cacheSizeGB的设置,确保内存分配与需求匹配。