【问题标题】:Docker not reporting memory usage correctly?Docker 没有正确报告内存使用情况?
【发布时间】:2015-07-02 02:44:23
【问题描述】:

通过在 (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: 行,我将看到正在使用/空闲的实际稳定内存量。另外,如果我观察主机上 top 中的实际进程,我可以看到进程本身只使用了不到 1% 的内存(32G 的 0.8%)。

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

【问题讨论】:

    标签: linux memory docker centos7 rhel7


    【解决方案1】:

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

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

    所以我只是忽略了从docker stats 获取的内存使用情况。

    【讨论】:

      【解决方案2】:

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2015-02-27
        • 2018-03-22
        • 1970-01-01
        • 2019-06-01
        • 2013-12-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多