我是码头工人的新手。我有一个nodejs(sails.js)应用程序。我使用docker部署了它。我的Ubuntu机器上只运行一个docker容器。
当我尝试使用" docker stats"来监视我的docker容器的内存使用情况时命令,下面是我得到的统计数据(如图所示)
我的问题是,为什么这个单一的码头容器正在吃大量的内存~207MiB?将来如果我想增加每个主机运行的容器数量,它会消耗这个倍数的内存吗?如果我想在我的机器上运行100个相同应用程序的容器,它似乎不是可行的解决方案。有没有办法优化docker容器的内存消耗?
(当我运行没有docker的同一个应用程序(sails lift / node app.js)时,它只消耗80MB的内存。)
答案 0 :(得分:1)
我知道这个问题很老,但我认为值得补充的是,如果您使用的是 Docker For Mac,您可以导航到 Docker > Preferences > Resources > Advamced
,并且在该页面上有几个选项来控制资源设置,例如:
和其他各种设置。我注意到如果我表示 2GB 内存,只要 Docker 桌面正在运行,它就会使用整个 2GB 内存。
答案 1 :(得分:0)
默认情况下,任何Docker Container都可能消耗尽可能多的硬件,如CPU和RAM。如果您在同一主机上运行多个容器,则应限制它们可以使用的内存量。例如:-m“300M” - 记忆交换“1G”
每个docker容器的平均开销为12M,docker deamon为130M
答案 2 :(得分:0)
这取决于容器占用大量内存的许多方面。
我认为你的情况并不表明nodejs(sails.js)在容器中占用更多内存而在docker之外占用更少 - 它可能需要几乎相同的内存。
容器也意味着基本容器(使用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查看我对自己问题的完整答案。