mongo不支持Docker内存限制

问题描述 投票:2回答:1

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

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

谢谢

mongodb unix docker memory memory-management
1个回答
5
投票

这里有几点。

首先,在容器中运行的任何进程都会认为它可以访问与主机相同的内存(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

© www.soinside.com 2019 - 2024. All rights reserved.