MongoDB 占用大量内存和Swap不释放

接到告警,一台部署了多实例MongoDB的机器内存和swap快用完了,排查发现下午某一个实例导入大量数据。
为什么会用了这么多内存和swap?
因为WiredTiger引擎使用内存的方式是:
50% of (RAM - 1 GB)或256 MB,哪个更大就以哪个为上限。
一个机器部署了多个实例,按照50% of (RAM - 1 GB)的比例分配,那当然是会把内存用完的。
解决方式只能是重启实例了,还好是复制集+分片集的架构,可以通过主库切换的方式来轮流重启从库;
当然最后别忘了在配置文件里设置wiredTigerCacheSizeGB。

可为什么导完数据以后,内存和swap还不释放?
因为MongoDB只顾着索要内存,但是用完以后,并不负责释放,而是交给Linux内核来管理这些用过内存。而Linux也比较懒,只有在需要内存的时候,再把这部分内存重用,所以看起来内存和swap都没有释放。

还发现即使swap都快用完了,内存却一直保持着2g的空闲空间?
跟vm.extra_free_kbytes有关

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值