为什么docker集装箱消耗大量的内存?

我是docker工人。 我有一个nodejs(sails.js)应用程序。 我用docker部署了它。 在我的Ubuntu机器上只有一个docker容器运行。

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

码头统计

我的问题是,为什么这个单一的docker集装箱正在吃大量的内存〜207MiB? 在将来,如果我想增加每个主机运行的容器数量,它是否会消耗这个倍数的内存? 如果我想在我的机器上运行100个相同的应用程序的容器似乎并不可行的解决scheme。 有什么办法来优化docker集装箱的内存消耗?

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

默认情况下,任何Docker容器可能会消耗尽可能多的硬件,如CPU和RAM。 如果你在同一个主机上运行多个容器,你应该限制它们可以消耗多less内存。 例如:-m“300M” – 内存交换“1G”

每个docker集装箱的平均开销是12M,docker达蒙130M

这取决于容器吃了很多内存的很多方面。

我认为你的情况并没有表明nodejs(sails.js)在容器中消耗更多的内存,而在docker之外消耗的内存更less – 它可能需要几乎相同的内存。

容器也意味着基础容器(用FROM定义的父容器)有时与“子容器”一起使用自己的资源等消耗一些内存。

启动容器时,可以限制Docker容器的cpu或内存。

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

如何在不使用docker时计算内存使用情况? 你的应用程序正在执行File I / O吗? 如果要将容器的数量(docker构成比例)缩放到数百,那么最好定义每个容器的资源限制。 我通过在我想限制的服务下的docker-compose.yml文件中添加一行:

 mem_limit: 32m 

其中m代表兆字节。

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

请参阅我自己的问题的完整答案在https://stackoverflow.com/a/41687155/6919159