Что означает докер, когда говорится: "Ограниченная память без обмена"
Я получаю предупреждение, когда я запускаю докер:
ПРЕДУПРЕЖДЕНИЕ. Ядро не поддерживает возможности ограничения подкачки или не монтируется. Память ограничена без обмена.
Я пытаюсь понять, что это значит, особенно фраза "Ограниченная память без обмена".
Означает ли это, что контейнер может использовать больше памяти, чем вы обычно допускаете, используя пространство подкачки хост-машины? Или это означает, что контейнер не может использовать пространство подкачки, даже если у компьютера заканчивается нехватка памяти? Это связано с тем, что не настроено пространство подкачки? Не имеет значения, если вы вообще не используете 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
, если он не нужен