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

问题描述 投票:0回答:5

我是码头工人的新手。我有一个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
5个回答
11
投票

我知道这个问题很老了,但我认为值得补充的是,如果您使用 Docker For Mac,您可以导航到

Docker > Preferences > Resources > Advanced
,该页面上有几个控制资源设置的选项,例如:

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

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


4
投票

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

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


0
投票

容器为什么会吃掉大量内存,这取决于很多方面。

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

容器也指基础容器(用 FROM 定义的父容器),有时还有“子容器”,这些“子容器”拥有自己的资源等,会消耗一些内存。

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

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


0
投票

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

mem_limit: 32m

其中 m 代表兆字节。

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

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


0
投票

当docker处于Linux模式时,会出现此问题。

1-转到此路线:C:\Users(用户名)

2-制作此文件(新记事本文件):.wslconfig

3-将此文本写入文件: [wsl2] 内存=4GB

4-保存并重新启动.

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