MongoDB限制使用内存及释放多余内存的办法概览
前言
MongoDB 占用内存过多导致服务器崩溃的问题令人十分头疼,这里记录一下三种方式解决 MongoDB 占用内存过多的问题
1.限制wiredTiger引擎的内存
参考作者的另外一篇文章,mongodb常用配置,不过需要注意的是,需要注意你的 MongoDB 使用支持 wiredTiger 引擎,有的版本恩使用的 mmapv1
2.释放太过激进的内存占用
db.adminCommand({setParameter:1,tcmallocAggressiveMemoryDecommit:1
})
3.调整MongoDB释放内存的速率
db.adminCommand({setParameter:1,tcmallocReleaseRate:5
})
释放率单位为千分之一,即当用户将1000个page(4k)大小的对象给释放后,会触发一个page的内存归还,所以tcmalloc建议配置0 - 10之间来保证系统操作次数,如果资源使用紧张,可将该配置成500+。
4.原理解释
MongoDB 使用 tcmalloc 内存分配器将内存分配并释放回系统。通过将参数 tcmallocAggressiveMemoryDecommit 设置为1,可以将空闲内存标记为空闲后立即释放。它既可以在启动时完成,也可以在运行时完成。也可以通过调整 tcmallocReleaseRate 来调整释放内存的速度。
5.总结
tcmallocReleaseRate 参数有的 MongoDB 版本不支持,作者的3.2版本就不支持,目前在使用前两种方式。回见~