在使用docker进行一些长时间测试(没有内存限制的docker 1.5和1.6)时,在centos 7 / rhel 7操作系统上观察运行容器的systemd-cgtop统计数据,我发现了似乎非常高的内存使用率。通常情况下,非容器化状态下运行的特定应用程序只使用大约200-300兆字节的内存。在一个为期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观察到的那样。如果我观察-/+缓存/缓冲区:行,我将看到实际使用/可用的稳定内存量。此外,如果我在主机上观察top中的实际进程,我可以看到进程本身仅使用不到1%的内存(32G的0.8%)。我有点困惑这里发生了什么。如果我为容器设置500-1000M的内存限制(我认为由于交换空间而变为两倍),即使进程本身没有使用那么多内存,我的进程是否最终会在达到内存限制时停止?如果有人对前者有任何反馈,那将是很好的。谢谢!