Подробный гайд: Настройка параметра vm.swappiness в Linux

Настройка vm.swappiness в Linux: гайд по управлению памятью. Узнайте, как сбалансировать RAM и swap для максимальной скорости и отзывчивости системы без фризов.

2026.07.15                  


Подробный гайд: Настройка параметра vm.swappiness в LinuxПодробный гайд: Настройка параметра vm.swappiness в Linux Настройка параметра vm.swappiness — это один из самых важных и одновременно самых неправильно понимаемых аспектов тюнинга памяти в Linux.

Ниже представлен подробный гайд, который поможет вам понять, как этот параметр работает на самом деле, и как настроить его для достижения идеального баланса между отзывчивостью интерактивных задач и эффективным использованием файлового кэша.


1. Главное заблуждение о vm.swappiness

Миф:

Значение vm.swappiness=60 означает, что система начнет использовать подкачку (swap), когда будет занято 60% оперативной памяти.

Реальность:

Это не порог заполнения RAM. Это коэффициент веса (относительная важность) в алгоритме ядра (reclaim algorithm), который решает, что именно вытеснять из памяти, когда она заканчивается: анонимные страницы (данные запущенных программ) или страничный кэш (кэшированные файлы с диска).

Высокое значение (ближе к 100):

Ядро будет агрессивнее свопить анонимную память (программы), чтобы освободить место для файлового кэша.

Низкое значение (ближе к 0):

Ядро будет агрессивно очищать файловый кэш, чтобы сохранить запущенные программы в RAM, и будет использовать swap только в крайнем случае.


2. Шкала значений (для современных ядер Linux 3.5+)

Диапазон значений: от 0 до 100 (в некоторых новых ядрах до 200):

  • 0: В старых ядрах означало "отключить swap". В современных ядрах это просто очень низкое значение, при котором swap используется только если системе грозит OOM (Out Of Memory).
  • 1: Абсолютный минимум свопинга. Ядро будет держать анонимную память в RAM до последнего.
  • 10: Рекомендуемое значение для большинства десктопных и интерактивных систем.
  • 60: Историческое значение по умолчанию во многих дистрибутивах. Хороший баланс для серверов общего назначения.
  • 100: Ядро будет максимально агрессивно выгружать фоновые процессы в swap, чтобы освободить RAM под кэш файлов.

3. Как проверить и изменить значение

Проверка текущего значения:

cat /proc/sys/vm/swappiness
# или
sysctl vm.swappiness

Временное изменение (до перезагрузки):

Отлично подходит для тестирования.

sudo sysctl vm.swappiness=10

Постоянное изменение:

Чтобы настройка сохранилась после перезагрузки, добавьте её в конфигурацию sysctl.

1. Создайте или отредактируйте файл настроек (рекомендуется создавать отдельные файлы в /etc/sysctl.d/):

   sudo nano /etc/sysctl.d/99-swappiness.conf

2. Добавьте строку:

   vm.swappiness=10

3. Примените изменения без перезагрузки:

   sudo sysctl --system

4. Выбор значения под ваши задачи (Баланс и Отклик)

Выбор значения напрямую зависит от сценария использования машины.

Вот готовые рекомендации:

Сценарий А: Десктоп, Рабочая станция, Игровой ПК (Интерактивность)

  • Рекомендуемое значение: 1 или 10
  • Почему: Интерактивные приложения (браузер, IDE, игры, аудиоредакторы) требуют мгновенного отклика. Если ядро начнет свопить активные вкладки браузера на диск, вы получите "фризы" и микрозависания. При значении 10 ядро будет жертвовать файловым кэшем (который быстро восстановится с диска), чтобы держать ваши программы в быстрой RAM.
  • Примечание: Если у вас мало RAM (8 ГБ и меньше), ставьте 10. Если RAM много (32+ ГБ), можно смело ставить 1.

Сценарий Б: Сервер баз данных (PostgreSQL, MySQL, Redis)

  • Рекомендуемое значение: 1 (или 10)
  • Почему: Базы данных сами отлично управляют своей памятью. Попадание страниц БД в swap — это катастрофа для производительности (дисковый I/O в разы медленнее RAM). Вам нужно, чтобы ядро вообще не трогало память процессов БД.
  • Дополнительно: Для БД часто вообще отключают swap или настраивают mlockall для блокировки памяти процесса БД от свопинга.

Сценарий В: Веб-сервер, Файловый сервер, Кэширующий прокси (Файловый кэш)

  • Рекомендуемое значение: 30 - 60
  • Почему: Здесь важна скорость чтения файлов с диска. Ядро должно использовать максимум свободной RAM для кэширования файлов. Если запущены какие-то фоновые задачи (cron, логи, мониторинг), их можно спокойно вытеснить в swap, чтобы освободить RAM для файлового кэша.

Сценарий Г: Сервер с очень малым объемом RAM (1-4 ГБ)

  • Рекомендуемое значение: 30 - 60
  • Почему: Если вы поставите 1 на системе с 2 ГБ RAM, когда память кончится, сработает OOM Killer (Out Of Memory) и просто убьет ваши процессы. Значение 60 позволит ядру выгружать в swap редко используемые фоновые демоны, сохраняя место для активных задач.

5. Сопутствующие параметры (Для глубокой настройки)

Чтобы тонко настроить баланс между RAM и кэшем, одного swappiness может быть недостаточно. Обратите внимание на эти параметры:


vm.vfs_cache_pressure

Управляет тенденцией ядра к reclaim (освобождению) памяти, занятой inode и dentry (кэш структуры файлов и директорий).

  • По умолчанию: 100
  • Если поставить 50 или ниже: Ядро будет дольше держать метаданные файлов в RAM. Это ускоряет работу с большим количеством мелких файлов (например, компиляция кода, работа с git-репозиториями, почтовые серверы).
  • Как настроить: vm.vfs_cache_pressure=50

Использование zram или zswap (Современный подход)

Если вы хотите получить максимальную отзывчивость на десктопе или слабом сервере, вместо (или вместе с) классическим swap на диске используйте zram.

Суть:

zram создает сжатый блок-устройство в самой RAM. Когда ядро хочет свопить данные, оно не пишет их на медленный диск, а сжимает и кладет в другую часть RAM.

Результат:

Вы получаете эффект "расширения" RAM. Декомпрессия процессором происходит в разы быстрее, чем чтение с SSD/HDD. При использовании zram значение vm.swappiness можно смело ставить на 60 или даже 100, так как "своп" происходит внутри быстрой памяти.


6. Мониторинг: Как понять, что настройка работает?

После изменения параметра понаблюдайте за системой под нагрузкой.

1. Смотрим на использование Swap:

    watch -n 1 cat /proc/meminfo | grep -i swap

Или используйте htop / btop. Если при swappiness=10 swap остается пустым, даже когда RAM забита на 90% (за счет файлового кэша) — вы настроили всё правильно для десктопа.


2. Смотрим на активность подкачки (Paging/Swapping):

    vmstat 1

Смотрите на колонки si (swap in) и so (swap out). Если там постоянно идут ненулевые значения, значит, системе физически не хватает RAM, и она постоянно "мелет" память (thrashing). В этом случае изменение swappiness не поможет, нужно добавлять физическую RAM.


Важно:

  1. Для персонального ПК/ноутбука ставьте vm.swappiness=10 (или 1, если RAM > 16 ГБ). Это уберет микрофризы.
  2. Для сервера общего назначения оставьте 30 или 60.
  3. Для баз данных ставьте 1 и следите, чтобы swap вообще не использовался.
  4. Если система начинает тормозить из-за нехватки памяти — меняйте не только swappiness, но и рассмотрите внедрение zram.

Мы делимся этой технической информацией, чтобы помочь вам в решении задач — используйте её с пониманием. Статья носит рекомендательный характер, поэтому, пожалуйста, применяйте описанные методы осмотрительно.


Статью подготовил: Денис Аверко @Nymexis г. Омск

Комментарии

Загрузка...
Если комментарии не загружаются, можете попробовать отключить блокировщик рекламы для этого сайта