5

通过在 (centos 7 / rhel 7) 上使用 docker(docker 1.5 和 1.6,没有内存限制)进行一些寿命测试,并观察正在运行的容器的 systemd-cgtop 统计数据,我注意到内存使用量似乎非常高。通常,在非容器化状态下运行的特定应用程序仅使用大约 200-300Meg 的内存。在 3 天的时间里,我最终看到 systemd-cgtop 报告我的容器使用了高达 13G 的内存。虽然我无论如何都不是 Linux 管理员专家,但我开始深入研究这一点,这指向了以下文章:

https://unix.stackexchange.com/questions/34795/correctly-determining-memory-usage-in-linux

http://corlewsolutions.com/articles/article-6-understanding-the-free-command-in-ubuntu-and-linux

所以基本上我所理解的是确定系统单元内的实际可用内存将是查看 -/+ 缓冲区/缓存:在“free -m”中而不是顶行,因为我还注意到顶行在“free -m”内会随着内存的使用而不断增加,并不断显示出减少的可用内存,就像我通过 systemd-cgtop 观察我的容器一样。如果我观察 -/+ buffers/cache: 行,我将看到正在使用/空闲的实际稳定内存量。此外,如果我观察主机顶部的实际进程,我可以看到进程本身只使用了不到 1% 的内存(32G 的 0.8%)。

我对这里发生的事情有点困惑。如果我为容器设置了 500-1000M 的内存限制(我相信由于交换,它会变成两倍)当我达到内存限制时我的进程最终会停止,即使进程本身没有使用有这么多内存吗?如果有人对前者有任何反馈,那就太好了。谢谢!

4

2 回答 2

1

我在 CentOS 7 中使用了一段时间的 docker,并且对这些感到困惑。检查 github 问题链接,在这个版本中看起来docker stats有点误导。

https://github.com/docker/docker/issues/10824

所以我只是忽略了从docker stats.

于 2015-04-27T03:49:28.107 回答
0

你问了一年,但在这里为其他感兴趣的人添加一个答案。如果您设置内存限制,我认为除非它无法回收未使用的内存,否则它不会被杀死。cgroups 指标和因此 docker stats 显示页面缓存+RES。您可以查看 cgroups 的详细指标以查看分解 我遇到了类似的问题,当我使用内存限制进行测试时,我看到容器没有被杀死。相反,内存被回收和重用。

于 2017-01-17T01:02:14.483 回答