MongoDB(版本≥3.2默认使用WiredTiger存储引擎)的内存管理核心是WiredTiger缓存(storage.wiredTiger.engineConfig.cacheSizeGB),用于缓存数据和索引,直接影响查询性能。
/etc/mongod.conf),在storage.wiredTiger.engineConfig下设置cacheSizeGB(单位:GB)。例如,16GB内存服务器可设置为10-12GB(保留部分内存给操作系统及其他应用)。db.adminCommand({setParameter: 1, wiredTigerEngineRuntimeConfig: "cache_size=8G"}) THP会导致内存碎片化,影响MongoDB性能。需在/etc/sysctl.conf中添加:
vm.nr_hugepages = 0 并执行sudo sysctl -p使配置生效。
vm.swappiness控制操作系统使用交换空间(Swap)的倾向,建议设置为10或更低(值越低,越少使用Swap):
sudo sysctl vm.swappiness=10 echo "vm.swappiness=10" | sudo tee -a /etc/sysctl.conf MongoDB需要大量文件描述符处理并发连接,编辑/etc/security/limits.conf,添加:
mongod soft nofile 65536 mongod hard nofile 65536 通过MongoDB Shell执行以下命令,查看缓存命中率、脏数据比例等关键指标:
db.serverStatus().wiredTiger.cache 重点关注:
bytes dirty in the cache(脏数据量,需控制在合理范围);bytes read into cache(从磁盘读取到缓存的数据量,反映缓存命中率)。使用Shell命令查看MongoDB进程的内存占用:
db.serverStatus().mem 输出包括:resident(常驻内存)、virtual(虚拟内存)、mapped(映射内存)等。
使用top、htop或vmstat命令监控系统内存使用情况,确保操作系统及其他应用有足够内存。
长期运行的MongoDB可能积累内存碎片,建议每周或每月重启一次(通过cron任务自动化):
0 3 * * 0 systemctl restart mongod SSD的高I/O性能可减少MongoDB对内存的依赖(如减少磁盘读取次数),提升整体性能。
db.collection.createIndex({field: 1}));limit()、projection()限制返回数据量);skip()+limit()或$slice操作符,减少内存占用。