我是码头工人的新手。我有一个nodejs(sails.js)应用程序。我已经使用docker部署了它。我的 Ubuntu 机器上只有一个 docker 容器在运行。
当我尝试使用“docker stats”命令监控 docker 容器的内存使用情况时,下面是我得到的统计信息(如图所示)
我的问题是,为什么这个单个 docker 容器会占用大量内存 ~207MiB?将来如果我想增加每个主机运行的容器数量,它会消耗这个倍数的内存吗?如果我想在我的机器上运行 100 个相同应用程序的容器,这似乎不是可行的解决方案。有没有办法优化docker容器的内存消耗?
(当我在没有 docker 的情况下运行相同的应用程序(sails lift/node app.js)时,它只消耗 80MB 内存。)
我知道这个问题很老了,但我认为值得补充的是,如果您使用 Docker For Mac,您可以导航到
Docker > Preferences > Resources > Advanced
,该页面上有几个控制资源设置的选项,例如:
以及其他各种设置。我注意到,如果我表示 2GB 内存,只要 Docker 桌面在运行,它就会使用整个 2GB 内存。
默认情况下,任何 Docker 容器都可能消耗尽可能多的硬件,例如 CPU 和 RAM。如果您在同一主机上运行多个容器,您应该限制它们可以消耗的内存量。例如:-m“300M”--内存交换“1G”
每个docker容器的平均开销是12M,docker deamon - 130M
容器为什么会吃掉大量内存,这取决于很多方面。
我认为你的情况并不表明nodejs(sails.js)在容器中占用更多内存而在docker外部占用更少 - 它可能需要几乎相同的内存。
容器也指基础容器(用 FROM 定义的父容器),有时还有“子容器”,这些“子容器”拥有自己的资源等,会消耗一些内存。
启动容器时可以限制docker容器的CPU或内存。
docker run --memory=1Gb --cpushares=0 name-container
不使用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。
当docker处于Linux模式时,会出现此问题。
1-转到此路线:C:\Users(用户名)
2-制作此文件(新记事本文件):.wslconfig
3-将此文本写入文件: [wsl2] 内存=4GB
4-保存并重新启动.