首页 文章

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

提问于
浏览
5

通过对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 回答

  • 1

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

  • 0

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

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

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

相关问题