Настройка SWAP

Периодически системе может не хватать физической оперативной памяти для обслуживания всех приложений. Решением как правило является увеличение объёма RAM в соответствии с задачами. Но порой нехватка памяти случается лишь изредка, в этом случае поможет настройка Swap.

Обратите внимание: мы не рекомендуем Вам включать SWAP на серверах, работающих на SSD-дисках. Использование SWAP вместе с SSD-дисками может существенно снизить время работы SSD-диска, это связано с тем, что у таких дисков есть предел по количеству циклов записи, а использование Swap как раз активно записывает данные на диск.

Что такое Swap?

Swap - это пространство на жёстком диске, которое предназначено для записи временных файлов операционной системой в случае, когда оперативной памяти (RAM) уже не хватает. В общем случае это даёт возможность использовать больше оперативной памяти, чем есть физически, но в то же время это снижает производительность жёстких дисков.

Настройка SWAP

Включён ли уже Swap?

Первым делом нужно проверить, включён ли уже Swap в системе или же ещё нет. Выполните следующую команду в SSH:

swapon --show

Если в результате выполнения команды система ничего не выдала, значит SWAP ещё не включён.

Вы можете также проверить, включён ли Swap с помощью утилиты free:

free -h

В результате Вы должны увидеть что-то вроде:

total used free shared buff/cache available
Mem: 996M 44M 639M 4.5M 312M 812M
Swap: 0B 0B 0B

Как видно по последней строке, Swap не активирован.

Есть ли на сервере свободное место?

Перед активацией Swap нужно также проверить, есть ли на сервере достаточный объём дискового пространства. Вы можете сделать это с помощью команды:

df -h

В результаты Вы увидите что-то вроде:

Filesystem Size Used Avail Use% Mounted on
udev 488M 0 488M 0% /dev
tmpfs 100M 4.5M 96M 5% /run
/dev/vda1 25G 989M 23G 5% /
tmpfs 499M 0 499M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 499M 0 499M 0% /sys/fs/cgroup
tmpfs 100M 0 100M 0% /run/user/1001

В данном примере устройство /dev/vda1 является основным диском системы. Занято лишь 5% от общего объёма, значит можно настраивать Swap.

Создание Swap-файла

Самый простой способ создать файл Swap - использовать утилиту fallocate. Эта утилита быстро создаст файл нужного нам размера.

Поскольку сервер в примере имеет 1 Гб RAM, мы можем создать Swap-файл объёмом в 2 Гб:

fallocate -l 2G /swapfile

Проверить корректность создания файла можно командой:

ls -lh /swapfile

В результате Вы увидите:

-rw-r--r-- 1 root root 2.0G Jul 20 13:30 /swapfile

Включение Swap

После создания файла Swap мы можем приступить к активации Swap в системе.

Сначала нам нужно дать файлу необходимые права доступа:

chmod 600 /swapfile

Теперь мы можем пометить файл как файл, предназначенный для Swap:

mkswap /swapfile

Далее нужно включить Swap в системе:

swapon /swapfile

Теперь проверим, всё ли включилось правильно:

swapon --show

В результате Вы должны увидеть что-то вроде:

NAME TYPE SIZE USED PRIO
/swapfile file 2048M 0B -1

И теперь проверим вывод утилиты free:

free -h
total used free shared buff/cache available
Mem: 996M 44M 637M 4.5M 314M 811M
Swap: 2.0G 0B 2.0G

Если вывод на Вашей системе соответствует приведённым выше двум примерам, значит Swap успешно активирован.

Настройка постоянной работы Swap

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

Сначала сделаем копию файла:

cp /etc/fstab /etc/fstab.bak

Теперь добавим в него запись о Swap-файле:

echo '/swapfile none swap sw 0 0' >> /etc/fstab

Гибкая настройка Swap

Описанные ниже действия не являются обязательными, но Вы можете использовать эти настройки для повышения производительности Вашей системы при активном Swap.

Параметр swappiness позволяет настроить частоту сброса данных из RAM в Swap. Значение определяется в процентах, от 0 до 100. При значении около 0 система не будет сбрасывать данные без очень веской необходимости. При значении около 100 система будет активно использовать Swap для того, что было как можно больше свободной оперативной памяти. Это может существенно замедлить работу дисков, но и повысить производительность некоторого ПО.

Текущее значение параметра swappiness можно увидеть с помощью команды:

cat /proc/sys/vm/swappiness
60

Мы рекомендуем установить значение от 0 до 10. Для установки значения выполните команду:

sysctl vm.swappiness=10

Настройка будет действовать до следующей перезагрузки. Чтобы сделать её постоянной, выполните команду:

echo 'vm.swappiness=10' >> /etc/sysctl.conf

Другой параметр, который может помочь - vfs_cache_pressure. Он определяет, будет ли система кэшировать данные о inode (данные о файловой системе) и как часто. Чем выше значение, тем чаще система будет обновлять данные. Мы рекомендуем установить значение в 50.