文档说:
在这种配置下,当容器消耗的内存超过 200M 小于 500M 时,下一次系统内存回收会尝试将容器内存收缩到 200M 以下。
但这实际上意味着什么?
假设我有一个运行 Solr 的容器,并且:
docker run -m 1G --memory-reservation 768M solr
开始使用800M内存对容器内的Solr进程有什么影响?没有什么?
仅当/当内存使用量随后降至 768M 以下时...此标志允许 docker 从 solr 容器中回收内存?...否则容器将继续消耗高水位内存使用量?
这与群调度有什么关系?如果 swarm 总是为容器分配 1G,因为-m
then--memory-reservation
在这种情况下没有用吗?
该
--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
.