Ответ
В DevOps-практике swap отключают в нескольких ключевых сценариях для обеспечения стабильной производительности и предсказуемого поведения систем.
Основные случаи:
-
Контейнерные среды (Docker/containerd):
- В production-окружениях для контейнеров, особенно при использовании оркестраторов, чтобы избежать неконтролируемого своппинга, который может привести к деградации всех контейнеров на хосте.
- Настраивается через параметр
--memory-swap=-1в Docker или в конфигурацииdaemon.json.
-
Серверы баз данных:
- Для таких СУБД, как PostgreSQL, MongoDB, Redis и Elasticsearch, отключение swap является стандартной рекомендацией. Это предотвращает задержки, вызванные подкачкой страниц на диск, что критично для интерактивных транзакций и операций в памяти.
-
Высокопроизводительные вычисления (HPC) и кластеры:
- В задачах, где важна максимальная и стабильная скорость вычислений (например, рендеринг, моделирование), swap отключают, чтобы гарантировать, что процессы не будут вытеснены на медленный диск.
-
Серверы приложений с гарантированным объемом RAM:
- На серверах с избыточным объемом оперативной памяти, выделенным под конкретное приложение (например, JVM-приложение с фиксированным
-Xmx), swap часто отключают, чтобы ОС не могла перемещать страницы, что упрощает анализ использования памяти.
- На серверах с избыточным объемом оперативной памяти, выделенным под конкретное приложение (например, JVM-приложение с фиксированным
Как отключить в Linux (на примере Ubuntu/CentOS):
# Временно отключить все swap-разделы
sudo swapoff -a
# Постоянно отключить, закомментировав записи в /etc/fstab
sudo sed -i '/swap/ s/^/#/' /etc/fstab
# Или удалить строки, содержащие swap
sudo sed -i '/swap/d' /etc/fstab
Важно: Отключать swap следует только при наличии достаточного объема оперативной памяти и понимании, что при её исчерпании ОС будет завершать процессы через OOM Killer, а не использовать диск как резерв.