Назад | Перейти на главную страницу

Что на практике делает флаг --memory -servation?

Документы говорят:

В этой конфигурации, когда контейнер потребляет память более 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.