Как добавить swap в Ubuntu 20.04
Ubuntu | Комментировать запись
Добавление swap (пространства подкачки) – один из самых простых способов предотвратить ошибки памяти приложений. Этот мануал поможет создать и включить swap-пространство на сервере Ubuntu 20.04.
Внимание! Пространство swap рекомендуется добавлять в системах, использующих традиционные жесткие диски; использование swap в системах, работающих на SSD, со временем может вызвать проблемы и даже привести к порче оборудования. В связи с этим крайне не рекомендуется включать swap на серверах провайдеров, использующих SSD-хранилища.
Что такое swap?
Swap – это специальный раздел на жестком диске, в котором операционная система может временно сохранять данные, которые она больше не может держать в RAM. Это позволяет увеличить количество информации, хранящейся в рабочей памяти, но с некоторыми нюансами. Пространство жесткого диска будет использоваться в основном тогда, когда RAM уже не хватает для передачи данных.
Информация, записанная на жесткий диск, подгружается медленнее, чем информация, хранящаяся в оперативке. Операционная система запускает данные приложения в оперативной памяти, а swap использует для хранения более старых данных. В целом, иметь swap-пространство на случай, если ОЗУ переполнится, – отличный способ перестраховаться.
1: Проверка системы на swap
Для начала нужно узнать, активировано ли swap-пространство в вашей системе. В целом, в рамках одной системы может быть несколько swap-файлов или swap-разделов, но одного должно быть вполне достаточно.
Чтобы узнать, есть ли в текущей системе активное swap-пространство, введите:
sudo swapon --show
Если команда не вернула никакого результата, пространства swap в текущей системе нет.
Еще один способ проверки swap – утилита free, которая показывает использование памяти системы.
free -h
total used free shared buff/cache available
Mem: 981Mi 122Mi 647Mi 0.0Ki 211Mi 714Mi
Swap: 0B 0B 0B
Как видно из последней строки, общее использование swap в сети равно 0, что совпадает с результатом предыдущей команды.
2: Проверка пространства на жёстком диске
Прежде чем создать swap-файл, нужно узнать текущее состояние диска. Чтобы получить эти данные, введите:
df -h
Filesystem Size Used Avail Use% Mounted on
udev 474M 0 474M 0% /dev
tmpfs 99M 932K 98M 1% /run
/dev/vda1 25G 1.4G 23G 7% /
tmpfs 491M 0 491M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 491M 0 491M 0% /sys/fs/cgroup
/dev/vda15 105M 3.9M 101M 4% /boot/efi
/dev/loop0 55M 55M 0 100% /snap/core18/1705
/dev/loop1 69M 69M 0 100% /snap/lxd/14804
/dev/loop2 28M 28M 0 100% /snap/snapd/7264
tmpfs 99M 0 99M 0% /run/user/1000
В данном случае диск – это устройство / в столбце Mounted on; как видите, места на нём достаточно много (в нашем примере использовано всего 1,4 Г; ваш вывод, конечно, будет другой).
Существует множество разных мнений о «правильном» размере swap-пространства. В целом, это зависит от личных предпочтений пользователя и требований приложения. Принято считать, что swap-пространство должно быть равно или вдвое больше объема оперативной памяти системы. В этом вопросе нужно ориентироваться на свободное дисковое пространство. Например, если RAM системы – 4 гигабайта, а вдвое большее swap-пространство (т.е., 8 гигабайт) займет существенную часть диска, swap должен быть не более 4 гигабайт.
3: Создание 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-пространства
Теперь файл создан, но пока что наша система еще не знает, что его можно использовать. Нужно отформатировать данный файл, а затем включить его, чтобы файл превратился в 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: 981Mi 123Mi 644Mi 0.0Ki 213Mi 714Mi
Swap: 1.0Gi 0B 1.0Gi
Теперь система сообщает о включенном swap-пространстве.
5: Автозагрузка swap
Итак, теперь swap-пространство включено и система может его использовать, но при перезапуске сервер не будет запускать его автоматически. Чтобы изменить это, отредактируйте файл /etc/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: SWAP, Swappiness, Ubuntu, Ubuntu 20.04