Введение

Периодически системе может не хватать физической оперативной памяти для обслуживания всех приложений. Решением как правило является увеличение объёма 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.