mongo不支持Docker内存限制

时间:2018-03-10 19:25:47

标签: mongodb unix docker memory memory-management

我遇到的问题是mongodb不尊重强加的容器内存限制并且溢出到交换中并且慢速爬行 - 问题似乎是mongo认为所有主机内存都可用。见https://github.com/dockerfile/mongodb/issues/34

我的问题是 - docker如何实现内存限制?我真的没有全面了解在unix中限制资源访问的可用选项是什么 - 有人能够快速概述一下吗?

由于

2 个答案:

答案 0 :(得分:4)

这里有几点。

首先,在容器中运行的任何进程都会认为它可以访问与主机一样多的内存(docker不会虚拟化内存)

您可以通过设置参数--memory来限制容器有权使用的内存。您可以将--memory-swap设置为与--memory完全相同的值来禁用互换:

  

如果--memory和--memory-swap设置为相同的值,则会阻止容器使用任何交换。这是因为--memory-swap是可以使用的组合内存和交换量,而--memory只是可以使用的物理内存量。

现在,请记住,即使您设置了--memory和--memory-swap,您的应用程序(mongoDB)也会认为它可以访问主机系统的总内存。在mongoDb 3.2中,它将使用总内存的60%,减去1G。如果要对此进行限制,则需要配置storage.wiredTiger.engineConfig.cacheSizeGB

  

storage.wiredTiger.engineConfig.cacheSizeGB:WiredTiger将用于的内部缓存的最大大小   所有数据。

在此处查看mongoDB文档:https://docs.mongodb.com/v3.2/reference/configuration-options/#storage.wiredTiger.engineConfig.cacheSizeGB

和docker文档: https://docs.docker.com/config/containers/resource_constraints/#memory

答案 1 :(得分:1)

除了以前的答案中已指定的内容外,Mongodb还将遵循版本3.6.13和4.0.9中的容器内存设置:

https://docs.mongodb.com/manual/reference/command/hostInfo/#hostInfo.system.memLimitMB