文档说:
在这种configuration下,当容器消耗200M以上,500M以下的内存时,下一次系统内存回收试图将容器内存缩小到200M以下。
但是这实际上意味着什么呢?
假设我有一个运行Solr的容器,并且:
docker run -m 1G --memory-reservation 768M solr
它开始使用800M内存时对容器内的Solr进程有什么影响? 没有?
只有当内存使用量低于768M时,这个标志才允许docker从solr容器中回收内存。 否则容器会继续消耗高水份的使用量呢?
这与群体调度有什么关系? 如果群由于-m总是为容器分配1G,那么在这种情况下--memory-reservation没有用处?
memory-reservation选项是称为memory.soft_limit_in_bytes的cgroup选项的包装。 您可以阅读“软限制”部分(过期)的手册: http : //elixir.free-electrons.com/linux/latest/source/Documentation/cgroup-v1/memory.txt
回收过程的更多信息在这里: http : //linux-mm.org/PageOutKswapd
从我所知道的,你的Solr进程可以使用800MB,只要没有来自其他cgroup的争用,那么内存将不会被回收。 它可以保持内存和使用达到1GB的硬性限制。 如果存在争用,那么内核将试图回收内存,但根据文档的soft limits is a best-effort feature.. no guarantees 。