Что означает докер, когда говорится: "Ограниченная память без обмена"

Я получаю предупреждение, когда я запускаю докер:

ПРЕДУПРЕЖДЕНИЕ. Ядро не поддерживает возможности ограничения подкачки или не монтируется. Память ограничена без обмена.

Я пытаюсь понять, что это значит, особенно фраза "Ограниченная память без обмена".

Означает ли это, что контейнер может использовать больше памяти, чем вы обычно допускаете, используя пространство подкачки хост-машины? Или это означает, что контейнер не может использовать пространство подкачки, даже если у компьютера заканчивается нехватка памяти? Это связано с тем, что не настроено пространство подкачки? Не имеет значения, если вы вообще не используете swap?

Примечание. Меня не интересует, как это исправить. В Google много результатов. Меня интересует, что это значит и почему это имеет значение.

Ответ 1

Вот что я нашел.

Своп не используется по умолчанию. Вы можете проверить это в контейнерах Ubuntu/Debian на /sys/fs/cgroup/memory/memory.stat. Проверьте значение подкачки, вы увидите, что оно установлено в 0 (байт). Нет использования свопа.

Вы можете включить и ограничить использование свопа с помощью флагов --memory и --memory-swap, как правило, и здесь, где это ПРЕДУПРЕЖДЕНИЕ кажется вам полезным. Из документации Docker относительно очень похожего предупреждения:

Если вам не нужны эти возможности, вы можете проигнорировать предупреждение. Вы можете включить эти возможности в Ubuntu или Debian, следуя этим инструкциям.

tl;dr: swap отключен по умолчанию. Если cgroup отключена или ограничения подкачки контейнера нарушены, как указывает это предупреждение, вы не сможете установить эти ограничения.

Ответ 2

Я нашел решение для Docker следующее:

На вашей машине для сборки sysctl.conf создайте файл sysctl.conf со следующей записью:

vm.nr_hugepages=128 

(128 - это то, что я выбрал, вы можете соответственно изменить)

Далее в вашем файле Dockerfile добавьте следующее в этот процесс.

COPY /folderlocation/sysctl.conf /etc/sysctl.conf

Это скопирует файл sysctl в правильный каталог в изображении докера.

Это работало на моем решении XMRig для докеров.

Ответ 3

Это может быть связано с тем, что вы использовали здесь флаг -m:

docker build \
  --build-arg commit_datavana="$commit_sha" \
  --build-arg CACHE_BUST="$(date)" \
  -m 8g \     # hurrrr
  -t "$name_tag" .

возможно уберите флаг -m, если он не нужен