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
的设置,确保内存分配与需求匹配。