为什么docker容器消耗大量内存?

时间:2016-10-08 14:40:30

标签: node.js docker docker-machine

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

当我尝试使用" docker stats"来监视我的docker容器的内存使用情况时命令,下面是我得到的统计数据(如图所示)

docker stats

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

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

4 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:0)

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

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

答案 2 :(得分:0)

这取决于容器占用大量内存的许多方面。

我认为你的情况并不表明nodejs(sails.js)在容器中占用更多内存而在do​​cker之外占用更少 - 它可能需要几乎相同的内存。

容器也意味着基本容器(使用FROM定义的父容器)有时使用"子容器"用自己的资源等消耗一些记忆。

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

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

答案 3 :(得分:0)

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

mem_limit: 32m

其中m代表兆字节。

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

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