WiredTiger是MongoDB默认的存储引擎(MongoDB 3.2及以上版本),其缓存大小是影响内存使用的关键参数。通过**storage.wiredTiger.engineConfig.cacheSizeGB参数可设置缓存大小,建议值为服务器物理内存的50%-70%**(需预留足够内存给系统和其他应用)。
操作步骤:
/etc/mongod.conf):sudo vi /etc/mongod.conf
storage部分,修改或添加wiredTiger.engineConfig.cacheSizeGB参数(例如设置为8GB):storage:
wiredTiger:
engineConfig:
cacheSizeGB: 8 # 根据服务器内存调整,如16GB内存可设为8-12GB
sudo systemctl restart mongod
验证配置:通过MongoDB shell查看WiredTiger缓存状态:
mongo --eval 'db.serverStatus().wiredTiger.cache'
该命令会显示缓存大小、使用量、命中率等信息,确认配置是否生效。
为减少内存碎片、提升MongoDB内存使用效率,需调整以下系统级参数:
THP会导致内存碎片化,影响MongoDB性能。通过以下命令关闭THP:
# 临时关闭(重启后失效)
sudo echo never > /sys/kernel/mm/transparent_hugepage/enabled
sudo echo never > /sys/kernel/mm/transparent_hugepage/defrag
# 永久关闭(添加到/etc/rc.local或创建sysctl配置)
echo "vm.nr_hugepages = 0" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
vm.swappiness参数控制系统使用交换空间的倾向,建议设为1-10(值越小,越倾向于使用物理内存)。
# 临时设置
sudo echo 1 > /proc/sys/vm/swappiness
# 永久设置(添加到/etc/sysctl.conf)
echo "vm.swappiness = 1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p
MongoDB需要大量文件描述符处理并发连接,编辑/etc/security/limits.conf文件,添加以下内容:
mongod soft nofile 65536
mongod hard nofile 65536
保存后重新登录或重启系统使限制生效。
若需在不重启服务的情况下调整内存使用,可通过setParameter命令动态修改部分参数:
mongo --eval 'db.adminCommand({setParameter: 1, internalQueryExecMaxMemoryUsageMB: 2048})'
mongo --eval 'db.adminCommand({setParameter: 1, wiredTigerCacheSizeGB: 6})'
注意:动态调整的参数在服务重启后会恢复为配置文件中的值,需通过修改mongod.conf实现永久生效。
调整内存配置后,需定期监控MongoDB内存使用情况,根据实际负载优化参数:
mongostat:查看数据库操作的QPS、延迟、内存使用等实时指标。mongotop:查看集合级别的读写时间分布,定位慢查询。db.serverStatus().mem:查看内存使用详情(如缓存命中率、脏数据比例)。cacheSizeGB;cacheSizeGB或优化查询(如添加索引)减少内存占用。cacheSizeGB设置过大,可能导致系统内存不足,触发OOM Killer杀死MongoDB进程。cacheSizeGB默认值为“60% RAM - 1GB”,3.4及以上版本为“50% RAM - 1GB”(最小256MB),调整时需参考对应版本的文档。