Введение / Зачем это нужно
Файл подкачки (swap) — это область на диске, которую Linux использует как расширение оперативной памяти (ОЗУ). Когда физической памяти становится мало, система перемещает неактивные страницы памяти в swap, освобождая ОЗУ для активных процессов.
Проблема: Настройки swap по умолчанию (особенно swappiness=60) часто не optimal для десктопов и серверов с малым объемом ОЗУ (2-8 ГБ). Система может слишком рано и активно начать использовать медленный диск (особенно HDD), что приводит к "тормозам", подтормаживанию интерфейса и долгой загрузке приложений.
Решение: Этот гайд покажет, как настроить swap для баланса между скоростью и стабильностью. Мы:
- Настроим параметр
vm.swappiness— контролируем склонность системы к использованию swap. - При необходимости создадим/увеличим swap-файл.
- Включим zram — технологию сжатия памяти в RAM, которая часто быстрее swap на диске.
После выполнения вы получите более отзывчивую систему, особенно при нехватке ОЗУ.
Требования / Подготовка
Перед началом убедитесь, что:
- У вас есть доступ к терминалу с правами суперпользователя (sudo).
- Вы знаете, какой у вас дистрибутив Linux (Ubuntu, Debian, CentOS и т.д.) и тип диска (SSD/HDD).
- Вы проверили текущее состояние swap (это первый шаг гайда).
- На диске достаточно свободного места (если планируете создавать/увеличивать swap-файл). Рекомендуемый размер: 1-2 ГБ для систем с 2-4 ГБ ОЗУ, до 4 ГБ для 4-8 ГБ ОЗУ.
- Для zram требуется ядро Linux 4.0 или новее (все современные дистрибутивы соответствуют).
Пошаговая инструкция
Шаг 1: Проверьте текущие настройки swap
Сначала давайте посмотрим, есть ли у системы swap и как она используется.
# Общая информация о swap (размер, использование)
free -h
# Более детальная информация
swapon --show
# Текущее значение параметра swappiness
cat /proc/sys/vm/swappiness
Что смотреть:
- В выводе
free -hстрокаSwap:. Если там0B, swap не настроен. swappinessпо умолчанию часто равен 60. Это означает, что система начнет активно использовать swap, когда заполнено около 40% ОЗУ. Для десктопов с малым ОЗУ это значение обычно слишком высокое.
💡 Совет: Если у вас SSD и мало ОЗУ (2-4 ГБ), начните с настройки zram (Шаг 4), а swappiness установите в диапазоне 10-20.
Шаг 2: Настройте параметр swappiness
Параметр vm.swappiness управляет балансом между выгрузкой страниц памяти в swap и очисткой кэша в ОЗУ. Значение от 0 до 100.
0— система будет избегать swap, пока не будет исчерпана вся ОЗУ и кэш.100— система будет активно использовать swap.
Рекомендуемые значения:
- Десктоп с SSD + мало ОЗУ (2-4 ГБ):
10-20 - Сервер/рабочая станция с большим ОЗУ (8+ ГБ):
10-30 - Система с HDD (старые диски):
30-60(чтобы минимизировать фрагментацию, но HDD и так медленный)
Временная настройка (до перезагрузки):
# Установите значение, например, 15
sudo sysctl vm.swappiness=15
# Проверьте
cat /proc/sys/vm/swappiness
Постоянная настройка (после перезагрузки):
# Отредактируйте конфигурационный файл
sudo nano /etc/sysctl.conf
Добавьте в конец файла строку:
vm.swappiness=15
Сохраните (Ctrl+O, Enter) и закройте (Ctrl+X) редактор. Применить можно либо перезагрузившись, либо выполнив:
sudo sysctl -p
Шаг 3: Создайте и активируйте swap-файл (при необходимости)
Если у вас нет swap или его размер недостаточен (например, меньше 1 ГБ для 4 ГБ ОЗУ), создайте новый.
Важно: Для SSD лучше использовать swap-файл, а не отдельный раздел, так как файл проще изменить. Но на очень старых HDD раздел может быть немного эффективнее.
# 1. Создайте файл нужного размера (например, 2 ГБ).
# Флаг 'fallocate' создает файл мгновенно. Для гарантии можно использовать 'dd'.
sudo fallocate -l 2G /swapfile
# Если fallocate не поддерживается вашей ФС, используйте dd (дольше):
# sudo dd if=/dev/zero of=/swapfile bs=1024 count=2097152
# 2. Установите правильные права доступа (только root может читать/писать)
sudo chmod 600 /swapfile
# 3. Форматируйте файл как swap
sudo mkswap /swapfile
# 4. Активируйте swap-файл немедленно
sudo swapon /swapfile
# 5. Проверьте, что файл появился в списке
swapon --show
free -h
Сделайте swap-файл постоянным (чтобы монтировался при загрузке):
# Добавьте запись в /etc/fstab
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
⚠️ Важно: Убедитесь, что на целевом разделе диска достаточно свободного места (
df -h). Swap-файл нельзя размещать на заполненном разделе.
Шаг 4: Настройте сжатие памяти zram (рекомендуется для SSD)
Zram (ранее zswap) — это модуль ядра, который создает виртуальный блок-устройство в ОЗУ и сжимает данные, которые планировались для записи в swap. Это гораздо быстрее, чем любой swap на диске (даже на SSD), и не изнашивает диск.
Проверьте, включен ли zram:
lsmod | grep zram
Если вывод пуст, модуль не загружен.
Установка и настройка (пример для Ubuntu/Debian):
# Установите утилиты для управления zram
sudo apt update && sudo apt install zram-tools -y
# Для RHEL/CentOS/Fedora:
# sudo dnf install zram-generator -y
Настройте параметры zram. Основной файл конфигурации для zram-tools — /etc/default/zramswap (Ubuntu) или /etc/systemd/zram-generator.conf (RHEL-семейство).
Пример для Ubuntu/Debian (/etc/default/zramswap):
# Отредактируйте файл
sudo nano /etc/default/zramswap
Установите:
# Размер zram-устройства в мегабайтах. Обычно 50-100% от ОЗУ для малых объемов.
# Для 2 ГБ ОЗУ: 1024 (1 ГБ). Для 4 ГБ: 2048 (2 ГБ).
# Не ставьте 100% от ОЗУ, оставьте место для ОС.
DEVICE_SIZE=2048
# Алгоритм сжатия (lzo-rle или zstd). zstd даёт лучшее сжатие, но требует CPU.
ALGO=lzo-rle
Сохраните файл.
Примените настройки:
# Перезапустите службу (или перезагрузитесь)
sudo systemctl restart zramswap
# Проверьте, что устройство создано и активно
cat /proc/swaps
free -h
Вы должны увидеть новую строку, например, /dev/zram0. Использование swap теперь будет идти в эту сжатыую область в RAM.
Шаг 5: Примените все настройки на постоянной основе
Мы уже настроили:
vm.swappinessчерез/etc/sysctl.conf.- Swap-файл через
/etc/fstab(если создавали). - Zram через службу
zramswap(она сама добавит устройство в/etc/fstabили использует systemd).
Финализация:
- Перезагрузите систему, чтобы убедиться, что все настройки применяются автоматически.
sudo reboot - После перезагрузки проверьте итоговое состояние:
Убедитесь, что swap (и zram, если настраивали) активен, аfree -h cat /proc/sys/vm/swappiness swapon --showswappinessимеет нужное значение.
Проверка результата
- Использование swap: Выполняйте обычные задачи (открытие браузера, редактора). Следите за
free -hили утилитойhtop(столбецSWAP). Использование должно быть минимальным при нормальной работе. - Отзывчивость системы: При открытии приложений или переключении между ними не должно быть долгих "подтормаживаний", связанных с чтением/записью на диск (слушайте HDD, если есть).
- Логи (опционально): При возникновении проблем с памятью смотрите логи ядра:
В идеале сообщений обsudo dmesg | grep -i "killed\|oom\|swap"OOM killer(убийце из-за нехватки памяти) быть не должно.
Возможные проблемы
| Проблема | Возможная причина | Решение |
|---|---|---|
| Swap-файл не активируется после загрузки | Ошибка в /etc/fstab или отсутствует файл. | Проверьте синтаксис строки в /etc/fstab. Убедитесь, что файл /swapfile существует (ls -lh /swapfile). |
| Система всё равно активно использует swap | swappiness слишком высок, или ОЗУ действительно мало. | Уменьшите vm.swappiness до 5-10. Рассмотрите возможность добавления физической ОЗУ. Zram может помочь, но он не заменит реальную память для тяжелых нагрузок. |
zram не работает, нет устройства /dev/zram0 | Модуль ядра не загружен или служба не запущена. | Проверьте `lsmod |
Ошибка "Invalid argument" при mkswap | Файл создан не полностью (например, fallocate на некоторых ФС). | Удалите файл (sudo rm /swapfile) и создайте его командой dd: sudo dd if=/dev/zero of=/swapfile bs=1M count=2048. |
| Система зависает при активном swap на HDD | Высокая нагрузка на медленный жесткий диск. | Срочно: Уменьшите swappiness. Включите zram (если процессор позволяет). Долгосрочно: Замените HDD на SSD. |