MongoDB在Ubuntu上的内存管理主要围绕WiredTiger存储引擎的缓存配置展开(MongoDB 3.2及以上版本默认使用WiredTiger)。通过调整缓存大小,可平衡数据库性能与系统资源占用。
操作步骤:
sudo nano /etc/mongod.conf。storage section,添加或修改wiredTiger.engineConfig.cacheSizeGB参数(单位:GB)。建议设置为系统总内存的50%-70%(需预留足够内存给系统及其他应用)。例如,若服务器有8GB内存,可设置为4GB:storage:
engine: wiredTiger
wiredTiger:
engineConfig:
cacheSizeGB: 4 # 根据实际情况调整
sudo systemctl restart mongod。为进一步提升MongoDB内存使用效率,需调整Ubuntu系统的内存管理参数:
vm.overcommit_memory参数决定内核是否允许内存超额分配(申请超过物理内存的内存)。设置为1可避免过度分配,但可能影响部分内存密集型操作的性能:
echo 1 | sudo tee /proc/sys/vm/overcommit_memory
# 持久化设置(添加到/etc/sysctl.conf)
echo "vm.overcommit_memory = 1" | sudo tee -a /etc/sysctl.conf
vm.swappiness参数控制内核使用交换空间(Swap)的倾向,值越低越倾向于使用物理内存。建议设置为10(默认值为60):
echo 10 | sudo tee /proc/sys/vm/swappiness
# 持久化设置(添加到/etc/sysctl.conf)
echo "vm.swappiness = 10" | sudo tee -a /etc/sysctl.conf
以上设置需重启系统或执行sudo sysctl -p使生效。
配置完成后,需通过以下工具验证内存设置是否生效,并监控内存使用状态:
登录MongoDB shell,执行以下命令查看WiredTiger缓存的当前使用情况(包括缓存大小、已使用内存等):
db.serverStatus().wiredTiger.cache
使用top或htop命令查看MongoDB进程(mongod)的内存占用情况,确认RES(常驻内存)是否符合预期:
top -p $(pgrep mongod)
# 或
htop
使用mongostat监控内存相关的操作指标(如缓存命中率、脏页写入等),帮助识别内存瓶颈:
mongostat --host localhost --port 27017
mongotop则可按集合统计读写时间,辅助定位内存消耗大的查询。
cacheSizeGB不宜超过系统总内存的70%,否则可能导致系统频繁使用Swap,降低性能甚至崩溃。cacheSizeGB,并通过监控工具持续跟踪内存使用情况。