通过在 (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: 行,我将看到正在使用/空闲的实际稳定内存量。此外,如果我观察主机顶部的实际进程,我可以看到进程本身只使用了不到 1% 的内存(32G 的 0.8%)。
我对这里发生的事情有点困惑。如果我为容器设置了 500-1000M 的内存限制(我相信由于交换,它会变成两倍)当我达到内存限制时我的进程最终会停止,即使进程本身没有使用有这么多内存吗?如果有人对前者有任何反馈,那就太好了。谢谢!