WiredTiger是MongoDB默认的存储引擎(MongoDB 3.2+),其缓存大小是影响内存使用的关键参数。通过调整cacheSizeGB参数,可限制WiredTiger使用的最大内存(单位:GB)。
/etc/mongod.conf),在storage section下添加或修改wiredTiger.engineConfig.cacheSizeGB参数。例如,设置为4GB:storage:
wiredTiger:
engineConfig:
cacheSizeGB: 4 # 推荐值为服务器物理内存的50%-70%
--wiredTigerCacheSizeGB参数直接指定(仅当前会话有效):mongod --wiredTigerCacheSizeGB=4
sudo systemctl restart mongod)后,通过以下命令查看当前缓存大小:mongo --eval 'db.serverStatus().wiredTiger.cache'
输出中的bytes dirty和bytes valid可反映缓存使用情况。为避免MongoDB与其他进程竞争内存,需调整Linux内核参数:
vm.overcommit_memory=1,防止内核允许应用程序申请超过物理内存+交换空间的内存(避免OOM Killer误杀MongoDB进程)。
echo 1 | sudo tee /proc/sys/vm/overcommit_memory
/etc/sysctl.conf中添加vm.overcommit_memory = 1,然后执行sudo sysctl -p。vm.swappiness=10(范围0-100,值越小越倾向于使用物理内存),减少系统将内存数据交换到磁盘的行为(提升IO性能)。
echo 10 | sudo tee /proc/sys/vm/swappiness
/etc/sysctl.conf中添加vm.swappiness = 10,然后执行sudo sysctl -p。setParameter设置查询过程中的内存使用上限,避免单个查询占用过多内存导致系统崩溃:setParameter:
internalQueryExecMaxMemoryUsageMB: 2048 # 单个查询最大内存使用量(MB)
wiredTigerCacheSizeGB: 4 # WiredTiger缓存大小(GB)
该参数需根据业务查询复杂度调整,建议设置为物理内存的1%-5%。swappiness可提升性能,但完全关闭交换空间(swappiness=0)可能导致内存不足时系统崩溃,建议保留少量交换空间(如1-2GB)。mongostat(监控操作速率)、mongotop(监控集合级读写时间)等工具定期检查内存使用情况,根据业务增长调整参数。通过以上步骤,可合理调整MongoDB在Linux系统中的内存使用,平衡数据库性能与系统稳定性。