1. 调整WiredTiger缓存大小(核心配置)
CentOS上MongoDB(默认使用WiredTiger引擎)的内存优化关键是合理设置storage.wiredTiger.engineConfig.cacheSizeGB参数,该参数控制WiredTiger引擎可用的缓存大小。建议根据服务器总内存和其他应用需求调整:例如,16GB内存服务器可设置为7.5GB(留出空间给系统和其他服务);若服务器仅运行MongoDB,可设置为物理内存的50%-70%(需避免过度占用导致系统不稳定)。配置时需编辑/etc/mongod.conf文件,修改后重启服务生效。
2. 限制MongoDB进程内存使用
除配置文件外,可通过启动参数--wiredTigerCacheSizeGB直接限制内存使用(如mongod --wiredTigerCacheSizeGB 4),或在CentOS中使用systemd限制(systemctl set-property mongod MemoryLimit 10G),或在cgroups/容器中设置内存上限,避免MongoDB占用过多内存影响系统及其他应用。
3. 优化操作系统内存参数
vm.swappiness:降低系统使用交换空间的倾向(设为10或更低),减少MongoDB因内存不足而使用Swap的概率(Swap会显著降低性能)。修改/etc/sysctl.conf文件(vm.swappiness=10),执行sysctl -p使设置生效。/etc/sysctl.conf添加vm.nr_hugepages=0,并重启系统或执行sysctl -p生效。overcommit_memory:设为2(禁用内存过度提交),避免系统过度分配内存导致MongoDB内存波动。同样修改/etc/sysctl.conf并执行sysctl -p。4. 监控内存使用状态
定期通过以下工具监控内存使用,确保配置合理:
db.serverStatus().wiredTiger.cache可查看WiredTiger缓存的使用情况(如已用内存、脏数据比例);db.stats()可估算工作集大小(活跃数据集合),帮助调整缓存大小。top、htop、free -m可实时查看系统内存占用;mongostat可监控查询内存使用情况(如res字段表示物理内存使用量)。5. 关闭不必要的功能减少内存占用
storage.mmapv1.smallFiles=true可减少每个数据文件的内存映射开销,但会略微降低性能(仅适用于小数据量场景)。storage.journal.enabled=false)。6. 使用分片和副本集分散内存压力
对于大规模数据或高并发场景,可通过分片(Sharding)将数据分散到多个MongoDB实例,或通过副本集(Replica Set)将读请求分散到从节点,减少单个实例的内存负载,提升整体性能。
7. 定期重启MongoDB释放内存
长时间运行的MongoDB实例可能因内存碎片或缓存积累导致性能下降,建议设置定时任务(如每天凌晨)重启服务(systemctl restart mongod),释放内存资源(需在业务低峰期执行,避免影响服务)。