--memory-reservation 标志在实践中起什么作用?

--memory-reservation 标志在实践中起什么作用?

文档说:

在此配置下,当容器消耗的内存大于 200M 且小于 500M 时,下一次系统内存回收会尝试将容器内存缩小到 200M 以下。

但这究竟意味着什么?

假设我有一个运行 Solr 的容器,并且:
docker run -m 1G --memory-reservation 768M solr

当容器开始使用 800M 内存时,对容器内部的 Solr 进程有什么影响?没有影响?

是否仅当内存使用量随后降至 768M 以下时...此标志才允许 docker 从 solr 容器中回收内存?...否则容器将继续消耗最高内存使用量?

这与 Swarm 调度有什么关系?如果 Swarm 总是为容器分配 1G,那么在这种情况下-m--memory-reservation没有用处了?

答案1

--memory-reservation选项在容器中设置 cgroup,以确保至少有 800Mb 可以分配给进程。如果是 cgroup_v1,可以在 中找到此值memory.soft_limit_in_bytes。您可以阅读(过时的)手册在“软限制”部分下。对于 cgroup_v2,此设置可在memory.low文件中找到。阅读更多内容cgroup_v2 文档

有关回收过程的更多信息请参见此处:http://linux-mm.org/PageOutKswapd

据我所知,您的 Solr 进程可以使用 800MB,只要没有来自其他 cgroup 的争用,内存就不会被回收。它可以保留内存并使用最多 1GB 的硬限制。如果存在争用,则内核将尝试回收内存,但根据文档的规定soft limits is a best-effort feature.. no guarantees

相关内容