【问题标题】:Why docker container is consuming lot of memory?为什么 docker 容器会消耗大量内存?
【发布时间】:2022-02-02 02:18:19
【问题描述】:

我是 docker 新手。我有一个 nodejs(sails.js) 应用程序。我已经使用 docker 部署了它。我的 Ubuntu 机器上只运行了一个 docker 容器。

当我尝试使用“docker stats”命令监控我的 docker 容器的内存使用情况时,下面是我得到的统计信息(如图所示)

我的问题是,为什么这个单一的 docker 容器会占用大量内存 ~207MiB?将来如果我想增加每台主机运行的容器数量,它会以这个倍数消耗内存吗?如果我想在我的机器上运行 100 个相同应用程序的容器,这似乎不是可行的解决方案。有没有办法优化 docker 容器的内存消耗?

(当我在没有 docker(sails lift / node app.js)的情况下运行相同的应用程序时,它只消耗 80MB 的内存。)

【问题讨论】:

    标签: node.js docker docker-machine


    【解决方案1】:

    我知道这个问题很老了,但我认为值得补充的是,如果您使用的是 Docker For Mac,您可以导航到 Docker > Preferences > Resources > Advanced,该页面上有几个用于控制资源设置的选项,例如:

    • CPU 数量
    • 内存
    • 交换
    • 磁盘映像大小

    和其他各种设置。我注意到,如果我表示 2GB 内存,只要 Docker 桌面在运行,它就会使用整个 2GB 内存。

    【讨论】:

      【解决方案2】:

      默认情况下,任何 Docker 容器都可能消耗尽可能多的硬件,例如 CPU 和 RAM。如果您在同一主机上运行多个容器,则应限制它们可以消耗的内存量。例如:-m "300M" --memory-swap "1G"

      每个docker容器的平均开销为12M,而docker deamon - 130M

      【讨论】:

        【解决方案3】:

        容器消耗大量内存的原因取决于很多方面。

        我认为您的情况并不表明 nodejs(sails.js) 在容器中消耗更多内存而在 docker 外部消耗更少 - 它可能占用几乎相同的内存。

        容器也意味着基本容器(用 FROM 定义的父容器),有时带有“子容器”,它们有自己的资源等,会消耗一些内存。

        您可以在启动容器时限制 docker 容器的 cpu 或内存。

        docker run --memory=1Gb --cpushares=0 name-container

        【讨论】:

          【解决方案4】:

          不使用docker时如何计算内存使用量?您的应用程序是否在执行文件 I/O?如果您想将容器的数量(docker-compose scale)扩展到一百,那么您最好定义每个容器的资源限制。 我通过在我想要限制的服务下的 docker-compose.yml 文件中添加一行来做到这一点:

          mem_limit: 32m
          

          其中 m 代表兆字节。

          只需查看 docker stats,您就不必担心,因为它包含可以回收的未使用内存。如果你设置了一个合理的内存限制,你会看到容器回收内存并继续运行。如果您怀疑存在泄漏,请检查以下链接中提到的容器 cgroup 的详细内存统计信息:https://docs.docker.com/engine/admin/runmetrics/

          请在https://stackoverflow.com/a/41687155/6919159查看我对自己问题的完整回答。

          【讨论】:

            猜你喜欢
            • 2011-05-10
            • 1970-01-01
            • 2011-05-12
            • 2014-09-02
            • 1970-01-01
            • 1970-01-01
            • 2019-08-05
            • 2017-06-17
            • 2019-09-30
            相关资源
            最近更新 更多