Docker没有正确报告内存使用情况?

时间:2015-04-23 18:25:20

标签: linux memory docker centos7 rhel7

通过对docker(docker 1.5和1.6没有内存限制)进行一些长寿测试(centos 7 / rhel 7)并观察正在运行的容器的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

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

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

2 个答案:

答案 0 :(得分:1)

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

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

因此我忽略了从docker stats获取的内存使用情况。

答案 1 :(得分:0)

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