我遇到的问题是mongodb不尊重强加的容器内存限制并且溢出到交换中并且慢速爬行 - 问题似乎是mongo认为所有主机内存都可用。见https://github.com/dockerfile/mongodb/issues/34
我的问题是 - docker如何实现内存限制?我真的没有全面了解在unix中限制资源访问的可用选项是什么 - 有人能够快速概述一下吗?
由于
答案 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