Как добавить swap в Ubuntu 18.04

Добавление пространства swap (подкачки) – один из самых простых способов увеличить активность сервера и предотвратить ошибки приложений out of memory. Данное руководство поможет создать и включить swap-пространство на сервере Ubuntu 18.04.

Важно! Пространство swap рекомендуется добавлять в системах, использующих традиционные жесткие диски; использование swap в системах, работающих на SSD, со временем может вызвать проблемы и даже привести к порче оборудования. В связи с этим крайне не рекомендуется включать swap на серверах провайдеров, использующих SSD-хранилища.

Что такое swap?

Swap – это раздел на жестком диске, в котором операционная система может временно хранить данные, которые она больше не может удерживать в RAM. Это позволяет увеличить количество информации, хранящейся в рабочей памяти, но с некоторыми нюансами. Пространство жесткого диска будет использоваться, главным образом, когда RAM уже недостаточно для передачи данных.

Информация, записанная на жесткий диск, будет подгружаться медленнее хранящейся в оперативке информации. Операционная система запускает данные приложения в оперативной памяти, а swap использует для хранения более старых данных. В целом, иметь swap-пространство на случай, если ОЗУ переполнится, — отличный способ перестраховаться.

1: Проверка системы на swap

Для начала нужно уточнить, активировано ли swap-пространство в данной системе. В целом, в рамках одной системы может быть несколько swap-файлов или swap-разделов, но одного должно быть вполне достаточно.

Чтобы узнать, есть ли активное swap-пространство в текущей системе, наберите:

sudo swapon --show

Если команда не вернула никакого результата, в текущей системе нет swap.

Еще один способ проверки swap-пространства – утилита free, которая показывает использование памяти системы. Чтобы узнать текущее состояние памяти и swap, наберите:

free -h
total        used        free      shared  buff/cache   available
Mem:           985M         84M        222M        680K        678M        721M
Swap:            0B          0B          0B

Как можно видеть, общее использование swap в сети равно 0, что совпадает с результатом предыдущей команды.

2: Свободное пространство на жёстком диске

Как правило, в качестве swap-пространства используется специально выделенная область диска. Тем не менее, изменить схему разбиения диска не всегда возможно. В таком случае swap-пространство можно создать в уже существующем разделе.

Сначала нужно узнать текущее состояние диска. Чтобы получить эти данные, введите:

df -h
Filesystem      Size  Used Avail Use% Mounted on
udev            481M     0  481M   0% /dev
tmpfs            99M  656K   98M   1% /run
/dev/vda1        25G  1.4G   23G   6% /
tmpfs           493M     0  493M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           493M     0  493M   0% /sys/fs/cgroup
/dev/vda15      105M  3.4M  102M   4% /boot/efi
tmpfs            99M     0   99M   0% /run/user/1000

В данном случае диск – это устройство / в солбце Mounted on; как видите, места на нём достаточно много.

Существует множество расхожих мнений о «правильном» размере swap-пространства. В целом, это зависит от личных предпочтений пользователя и требований приложения. Как правило, swap-пространство должно быть равно или вдвое больше объема оперативной памяти системы. В этом вопросе нужно ориентироваться на свободное дисковое пространство. Например, если RAM системы – 4 гигабайта, а вдвое большее swap-пространство (т.е., 8 гигабайт) займет существенную часть диска, swap должен быть не более 4 гигабайт.

3: Создание swap-файла

Ознакомившись с важными моментами установки swap и узнав доступное пространство жесткого диска, можно приступить к созданию swap-файла в данной файловой системе.

В мануале такой файл называется swapfile и находится в root-каталоге (/). Файл должен иметь объем необходимого swap-пространства.

Быстрее всего создаёт такой файл программа fallocate. Она мгновенно создает файл заранее выделенного размера без необходимости писать фиктивное содержимое.

Поскольку в данном случае используется сервер с 1 Гб RAM, мы создадим 1 Гб swap-пространства.

sudo fallocate -l 1G /swapfile

Чтобы проверить выделенный объём памяти, введите:

ls -lh /swapfile
-rw-r--r-- 1 root root 1.0G Apr 25 11:14 /swapfile

Как видите, команда создала файл с указанным объёмом памяти.

4: Включение swap-пространства

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

Но прежде необходимо изменить права на файл, чтобы только root имел право на чтение. Swap-файл с правами на чтение и изменение другими пользователями – огромный риск для безопасности сервера. Чтобы передать все права пользователю root, введите:

sudo chmod 600 /swapfile

Проверьте права на файл:

ls -lh /swapfile
-rw------- 1 root root 1.0G Apr 25 11:14 /swapfile

Теперь только пользователь root может читать файл и вносить изменения в него. Итак, файл защищен, теперь можно указать системе на swap-пространство с помощью команды:

sudo mkswap /swapfile
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf

Чтобы включить swap-пространство, введите:

sudo swapon /swapfile

Убедитесь, что процедура прошла успешно, проверив отчеты системы о swap:

sudo swapon --show
NAME      TYPE  SIZE USED PRIO
/swapfile file 1024M   0B   -2

Также можно использовать утилиту free:

free -h
total        used        free      shared  buff/cache   available
Mem:           985M         84M        220M        680K        680M        722M
Swap:          1.0G          0B        1.0G

Теперь система сообщает о включенном swap-пространстве.

5: Автозагрузка swap

Итак, теперь swap пространство включено, но при перезапуске сервер не будет запускать его автоматически. Чтобы изменить это, отредактируйте файл fstab. Создайте резервную копию файла на всякий случай:

sudo cp /etc/fstab /etc/fstab.bak

Добавьте данные о swap в конец файла.

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

6: Тонкая настройка swap

Существует несколько опций, которые могут влиять на производительность системы при работе swap.

Параметр swappiness

Параметр swappiness задает частоту использования системой swap-пространства. Значение swappiness выражается числом от 0 до 100 и измеряется в процентах.

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

Если значение swappiness ближе к 100, система будет передавать в swap большое количество данных с целью сохранить больше свободного места в RAM. В зависимости от профиля памяти приложения и цели использования сервера, это может быть лучше в некоторых случаях.

Чтобы просмотреть текущее значение swappiness, введите:

cat /proc/sys/vm/swappiness
60

Значение 60 не так уж плохо, но для виртуального выделенного сервера лучше установить меньшее значение.

Чтобы, к примеру, задать параметру swappiness значение 10, нужно ввести:

sudo sysctl vm.swappiness=10
vm.swappiness = 10

Данное значение будет действительным до следующей перезагрузки. Чтобы значение сохранялось и после перезагрузки сервера, откройте файл /etc/sysctl.conf в текстовом редакторе:

sudo nano /etc/sysctl.conf

Добавьте в конец файла:

vm.swappiness=10

Сохраните и закройте файл.

Параметр vfs_cache_pressure

Еще одна важная опция – это vfs_cache_pressure. Она управляет склонностью ядра восстанавливать память, которая используется для кэширования каталогов и инодов объектов.

В основном, это данные доступа к файловой системе. Как правило, найти их не так просто, а запрашиваются они часто, так что использовать кэш-память в этом случае очень удобно. Чтобы узнать текущее значение этого параметра, можно запросить файловую систему proc:

cat /proc/sys/vm/vfs_cache_pressure
100

Согласно текущим настройкам, система удаляет иноды из кэша слишком быстро. Установив меньшее значение (например, 50), система будет хранить информацию дольше:

sudo sysctl vm.vfs_cache_pressure=50
vm.vfs_cache_pressure = 50

Опять же, это значение действительно только для текущей сессии. Чтобы сделать его постоянным, нужно (как и в случае со swappiness) открыть конфигурационный файл sysctl в текстовом редакторе:

sudo nano /etc/sysctl.conf

и добавить в него строку:

vm.vfs_cache_pressure=50

Сохраните и закройте sysctl.

Заключение

Данный мануал рассказал вам, как рационально использовать оперативную память. Добавленное swap-пространство может предотвратить некоторые общие проблемы системы.

Столкнувшись с ошибкой OOM (out of memory) или  обнаружив, что система не может запустить нужные приложения, можно попробовать оптимизировать конфигурации приложений или обновить сервер. Настройка swap дает большую гибкость и сэкономит время при работе с менее мощным сервером.

Tags: , ,
  • Парфененко Артём

    Сделал все как в инструкции, виртуальная машина на хостинге после перезагрузки не загрузилась.
    Спасибо.