定期监控是内存管理的基础,可通过以下工具和方法掌握内存占用情况:
free -m查看系统整体内存(包括缓存、缓冲区)使用情况;vmstat 1监控内存、交换空间的实时变化;top/htop查看MongoDB进程的内存占用占比。db.serverStatus().mem查看内存使用详情(如WiredTiger缓存占用、数据脏页比例);mongostat监控读写操作的频率和内存消耗;mongotop定位具体集合的读写耗时(间接反映内存压力)。WiredTiger是MongoDB的默认存储引擎(MongoDB 3.2+),其缓存大小直接影响内存使用效率。
mongod.conf中配置storage.wiredTiger.engineConfig.cacheSizeGB,建议值为服务器物理内存的50%-70%(需预留内存给系统进程、其他应用)。例如,16GB内存服务器可设置为7GB(cacheSizeGB: 7)。--wiredTigerCacheSizeGB临时设置(如mongod --wiredTigerCacheSizeGB=4),但配置文件修改更持久。内核参数的优化能提升MongoDB内存使用效率,减少与系统的冲突:
/proc/sys/vm/overcommit_memory为1(允许内存超额分配,但需谨慎),或设置为2(严格限制,避免内存耗尽)。持久化需写入/etc/sysctl.conf(vm.overcommit_memory = 1)。vm.swappiness为10或更低(默认60),减少系统使用交换空间的概率(Swap会大幅降低性能)。例如,echo 10 | sudo tee /proc/sys/vm/swappiness,并添加到/etc/sysctl.conf。/etc/rc.local添加echo never > /sys/kernel/mm/transparent_hugepage/enabled,并赋予执行权限。低效的查询会占用大量内存(如全表扫描、未使用索引),需通过以下方式优化:
_id、username)创建索引,复合索引需遵循最左前缀原则。例如,db.users.createIndex({status: 1, age: -1})可加速status=1 AND age>20的查询。limit()减少查询返回的文档数量(如db.users.find().limit(10));通过投影(projection)仅返回必要字段(如db.users.find({}, {name: 1, email: 1})),降低内存占用。explain()查看执行计划),避免$where、$regex等低效操作。通过配置限制MongoDB的内存占用,避免其占用全部系统内存:
mongod.conf的storage.wiredTiger.engineConfig中设置cacheSizeGB(如4),限制WiredTiger缓存的最大内存。ulimit -v unlimited取消虚拟内存限制(默认可能有限制);或通过systemd服务文件(/etc/systemd/system/mongod.service)添加MemoryLimit=4G(限制物理内存使用)。修改后需执行systemctl daemon-reload生效。--memory参数限制容器内存(如docker run -m 4g),避免单个服务占用过多资源。对于大规模数据场景,分片和复制集能有效分散内存负载:
user_id分片),每个节点仅处理部分数据,减少单个节点的内存占用。配置步骤:sh.enableSharding("dbName")→sh.shardCollection("dbName.collectionName", {shardKey: 1})。priority: 0,仅用于读),减轻主节点的内存压力。定期维护能释放无用内存,提升数据库效率:
db.collection.remove({createTime: {$lt: ISODate("2025-08-01")}});或通过TTL索引自动删除(db.logs.createIndex({expireAt: 1}, {expireAfterSeconds: 0}))。--wiredTigerCompressor=zlib),但会增加CPU开销。db.collection.reIndex(),清理碎片化的索引,减少内存中的索引占用。通过系统工具限制MongoDB的资源使用,避免影响其他服务:
cgcreate -g memory:/mongo_group→echo 4G > /sys/fs/cgroup/memory/mongo_group/memory.limit_in_bytes)。docker run --memory=4g --cpus=2 mongo:latest),提升系统的稳定性和可管理性。