繁体   English   中英

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

[英]Docker not reporting memory usage correctly?

通过对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的内存限制(我相信它会因为交换而变成两倍),当我达到内存限制时,我的进程最终会停止,即使进程本身没有使用在那么多记忆附近? 如果有人对前者有任何反馈,那就太好了。 谢谢!

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

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM