Ubuntu下MongoDB内存管理的核心操作指南
Ubuntu系统中,MongoDB默认使用WiredTiger存储引擎(推荐),其内存管理主要通过cacheSizeGB参数控制。该参数定义了WiredTiger引擎可使用的最大内存(单位:GB),直接影响数据库的缓存效率和性能。
sudo nano /etc/mongod.conf;storage section,添加或修改wiredTiger.engineConfig.cacheSizeGB参数(例如设置为系统总内存的50%-70%,避免占用过多内存导致系统卡顿):storage: engine: wiredTiger wiredTiger: engineConfig: cacheSizeGB: 4 # 根据服务器内存调整,如16GB内存可设为8GB ③ 保存文件并重启MongoDB服务使配置生效:sudo systemctl restart mongod。配置修改后,需通过以下命令确认cacheSizeGB是否设置成功:
db.serverStatus().wiredTiger.cache,查看bytes dirty(脏页数据量)、bytes valid(有效缓存数据量)等指标,确认缓存大小是否符合预期;top -p $(pgrep mongod),观察RES(常驻内存)列,判断MongoDB实际占用的物理内存是否接近配置的cacheSizeGB。为防止MongoDB因内存不足导致系统频繁使用Swap(虚拟内存),需优化Swap设置:
sudo fallocate -l 16G /swapfile sudo chmod 600 /swapfile sudo mkswap /swapfile sudo swapon /swapfile sudo echo '/swapfile none swap sw 0 0' >> /etc/fstab # 永久生效 vm.swappiness控制系统使用Swap的倾向(值越低,越倾向于使用物理内存)。编辑/etc/sysctl.conf,添加vm.swappiness=10(推荐值:10-30),执行sudo sysctl -p使设置生效。除cacheSizeGB外,还可调整以下参数进一步优化内存使用:
oplogSizeMB定义了复制操作日志的大小(单位:MB),影响主从复制的性能。若服务器内存充足,可适当增大该值(如50GB),避免因oplog过小导致复制中断:systemLog: destination: file logAppend: true path: /var/log/mongodb/mongod.log operationProfiling: mode: slowOp # 开启慢查询分析 slowOpThresholdMs: 100 # 慢查询阈值(毫秒) storage: wiredTiger: engineConfig: oplogSizeMB: 51200 # 根据业务需求调整 operationProfiling模块,记录执行时间超过阈值的查询,帮助定位内存消耗大的慢查询,进而优化查询语句或索引。内存管理是长期过程,需定期监控以下指标:
mongostat(查看实时读写、内存使用情况)、mongotop(查看集合级读写耗时)、htop(系统级内存监控);