【问题标题】:Docker reserve a certain amount of memory for containerDocker为容器预留一定的内存
【发布时间】:2016-02-03 20:18:45
【问题描述】:

我在 docker 容器中运行 npm,但由于无法分配足够的内存,它经常中止。我看到docker run 命令的--memory (How do I set resources allocated to a container using docker?) 之类的标志似乎限制了容器可以消耗的最大内存量,但还没有看到任何可以让我保留一定数量的容器的内存,如果无法分配则立即中止。

【问题讨论】:

    标签: docker


    【解决方案1】:

    这不是 Linux 下内存管理的工作方式。

    如果您运行完全虚拟化,如 QEMU,则可以分配所有内存并将其传递到 VM。然后该虚拟机启动内核,内存由虚拟机中的内核管理。

    在 Docker 或任何其他容器/命名空间系统中,内存由运行 docker 的内核和“容器”管理。在容器中运行的进程仍然像正常进程一样运行,但在不同的cgroup 中运行。每个cgroup 都有限制,例如内核将分配给用户空间的内存量,或者它看到的网络接口,但它仍然在同一个内核上运行。

    与此类似的是,docker 是“荣耀的ulimit”。低于此限制的进程仍然像正常的 Linux 进程一样运行

    1. 他们根据需要分配内存
    2. 如果它们超过某些限制,或者主机内存不足,它们将导致 OOM 问题

    就像你不能为 Firefox 预分配内存一样,你也不能为 Docker 容器预分配内存。

    【讨论】:

      【解决方案2】:

      你不能在 docker 中保留内存,只能用 --memory 限制它。

      有关详细信息,请参阅:https://docs.docker.com/engine/reference/run/

      具体看用户内存限制部分。

      memory=inf, memory-swap=inf (default) >>>> 没有内存限制 容器。容器可以根据需要使用尽可能多的内存。

      请注意,这是默认设置。因此,就像系统上的其他进程一样,npm 将使用它可以获得/需要的所有内容。

      所以要么释放一些内存,要么添加更多。

      【讨论】:

        【解决方案3】:

        正如其他人所说,您不能为进程保留内存,因此也不能为容器保留内存。但是,您可以通过脚本调用节点应用程序,该脚本将检查可用内存并在低于某个阈值时退出。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2016-12-08
          • 1970-01-01
          • 2018-03-29
          • 1970-01-01
          • 1970-01-01
          • 2017-09-13
          • 2014-09-02
          相关资源
          最近更新 更多