MongoDB在Debian中的内存使用管理
MongoDB在Debian系统中的内存使用主要依赖WiredTiger存储引擎(默认引擎),其内存管理围绕“缓存”展开。WiredTiger会将磁盘中的数据和索引加载到内存中进行缓存,以提升读写性能。默认情况下,WiredTiger缓存大小为系统可用内存的50%减去1GB(或至少256MB),例如:若服务器有8GB可用内存,默认缓存约为3GB(8GB×50%-1GB=3GB)。
/etc/mongod.conf)或命令行参数调整缓存大小:
mongod.conf的storage.wiredTiger.engineConfig下添加cacheSizeGB参数(单位:GB),例如设置为4GB:storage:
wiredTiger:
engineConfig:
cacheSizeGB: 4
--wiredTigerCacheSizeGB参数指定,例如:mongod --wiredTigerCacheSizeGB 4
内置命令
连接到MongoDB Shell(mongo),执行db.serverStatus().mem命令,可查看以下关键指标:
resident:常驻内存(实际使用的物理内存);virtual:虚拟内存(映射的磁盘空间);mapped:映射的内存大小(磁盘文件映射到内存的部分)。系统工具
free -m命令查看系统整体内存使用情况(总内存、已用、空闲等);top/htop命令监控MongoDB进程的内存占用(按M键按内存排序);vmstat命令查看内存交换(Swap)情况。第三方工具
优化查询与索引
db.collection.createIndex({ fieldName: 1 })),避免全表扫描;db.collection.find({}, { field1: 1, field2: 1 }))限制返回字段,减少内存占用;limit()方法限制返回数据量,避免一次性加载过多数据。调整内核参数
修改/etc/sysctl.conf文件,降低vm.swappiness值(如设为0或10),减少系统对Swap的依赖(Swap会显著降低内存访问速度):
sudo sysctl -w vm.swappiness=10
执行sysctl -p使配置生效。
管理连接数
在mongod.conf的net部分设置maxPoolSize(最大连接数,如100)和maxIdleTimeMS(最大空闲时间,如300000毫秒),避免过多空闲连接占用内存。
启用内存回收
执行db.adminCommand({setParameter: 1, tcmallocAggressiveMemoryDecommit: 1})启用tcmalloc的激进内存回收策略,快速释放不再使用的内存(注意:可能对性能有轻微影响)。
定期维护
db.collection.dropIndex("indexName"));db.repairDatabase()修复数据库碎片,减少内存占用。