MongoDB的主配置文件通常位于/etc/mongod.conf,可通过以下命令确认路径:
sudo find / -name mongod.conf
使用文本编辑器(如nano或vi)打开配置文件:
sudo nano /etc/mongod.conf
MongoDB默认使用WiredTiger存储引擎(MongoDB 3.2+版本),其内存使用主要由cacheSizeGB参数控制,该参数定义了WiredTiger缓存的最大内存占用(单位:GB)。
在配置文件的storage section下添加或修改以下内容(以设置4GB为例):
storage:
wiredTiger:
engineConfig:
cacheSizeGB: 4 # 根据服务器内存调整,建议为系统内存的50%-70%(如64GB内存可设为48GB)
注意:cacheSizeGB是控制WiredTiger缓存的关键参数,直接影响MongoDB的读写性能。
若需限制MongoDB进程的内存映射文件大小(如避免占用过多虚拟内存),可在setParameter section添加以下配置(单位:GB):
setParameter:
wiredTigerEngineRuntimeConfig: "cacheSizeGB=4,memoryLimitGB=8" # cacheSizeGB为WiredTiger缓存,memoryLimitGB为进程总内存限制
说明:memoryLimitGB应大于等于cacheSizeGB,且不超过系统可用内存。
Hugepages会导致内存碎片化,影响MongoDB性能。需在系统配置中关闭:
编辑/etc/sysctl.conf文件,添加以下内容:
vm.swappiness = 0 # 禁用交换分区(避免内存不足时频繁换页)
vm.nr_hugepages = 0 # 关闭Hugepages
保存后执行sudo sysctl -p使配置生效。
为防止MongoDB进程占用过多内存导致系统崩溃,可通过limits.conf调整进程资源限制:
编辑/etc/security/limits.conf文件,添加以下内容:
* soft nofile 65536 # 单个进程可打开的最大文件数
* hard nofile 65536
保存后重新登录用户使配置生效。
修改配置文件后,需重启MongoDB服务:
sudo systemctl restart mongod
若重启失败,可通过journalctl -xe查看错误日志排查问题。
通过MongoDB Shell查看WiredTiger缓存状态,确认配置是否生效:
mongo --eval 'db.serverStatus().wiredTiger.cache'
输出结果中的bytes dirty(脏数据大小)、bytes valid(有效缓存大小)应小于等于配置的cacheSizeGB×1024³字节。
cacheSizeGB需根据服务器内存大小调整,建议为系统内存的50%-70%(如64GB内存可设为48GB),需为操作系统、其他应用程序预留足够内存。cacheSizeGB设置过大,会导致系统内存不足,引发频繁交换(swap)或进程被杀死。mongostat、mongotop或第三方监控工具(如Prometheus+Granafa)持续监控MongoDB内存使用情况,根据业务负载动态调整。通过以上步骤,可在CentOS系统中完成MongoDB内存的配置与优化,提升数据库性能与稳定性。