Документы говорят:
В этой конфигурации, когда контейнер потребляет память более 200 МБ и менее 500 МБ, следующее восстановление системной памяти пытается уменьшить память контейнера до менее 200 МБ.
Но что это на самом деле означает?
Скажем, у меня есть контейнер с Solr и:
docker run -m 1G --memory-reservation 768M solr
Какое влияние это оказывает на процесс Solr внутри контейнера, когда он начинает использовать 800 МБ памяти? Ничего?
Только если / когда использование памяти впоследствии упадет ниже 768M ... этот флаг позволяет докеру освободить память из контейнера solr? ... в противном случае контейнер продолжал бы потреблять все, что было при использовании высокой памяти?
Как это связано с планированием роя? Если рой всегда выделяет 1 ГБ для контейнера из-за -m
тогда это --memory-reservation
бесполезен в этом контексте?
в memory-reservation
option - это оболочка для опции cgroup, называемой memory.soft_limit_in_bytes
. Вы можете прочитать (устаревшее) руководство в разделе «Мягкие ограничения»: http://elixir.free-electrons.com/linux/latest/source/Documentation/cgroup-v1/memory.txt
Более подробная информация о процессе возврата находится здесь: http://linux-mm.org/PageOutKswapd
Насколько я могу судить, ваш процесс Solr может использовать 800 МБ, и до тех пор, пока нет конфликтов со стороны других групп, память не будет освобождена. Он может сохранять память и использовать до жесткого ограничения в 1 ГБ. Если есть разногласия, ядро попытается освободить память, но в соответствии с документом soft limits is a best-effort feature.. no guarantees
.