Как добавить пространство подкачки на Ubuntu 22.04

Введение

Один из способов защиты от ошибок нехватки памяти в приложениях – добавить некоторое пространство подкачки на ваш сервер. В этом руководстве мы рассмотрим, как добавить файл подкачки на сервер Ubuntu 22.04.

Что такое подкачка?

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

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

Шаг 1 – Проверка системы на наличие информации о подкачке

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

Мы можем узнать, есть ли на системе настроенная подкачка, набрав:

  1. sudo swapon --show

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

Вы можете проверить, есть ли активная подкачка, используя утилиту free:

  1. free -h
Output
total used free shared buff/cache available Mem: 981Mi 122Mi 647Mi 0.0Ki 211Mi 714Mi Swap: 0B 0B 0B

Как видно в строке Подкачка вывода, на системе нет активной подкачки.

Шаг 2 – Проверка доступного места на разделе жесткого диска

Прежде чем мы создадим наш файл подкачки, мы проверим текущее использование диска, чтобы убедиться, что у нас достаточно места. Сделайте это, введя:

  1. df -h
Output
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

Устройство с / в столбце Смонтирован на является нашим диском в данном случае. У нас достаточно места доступно в этом примере (использовано только 1.4G). Ваше использование вероятно будет отличаться.

Хотя существует множество мнений о подходящем размере области подкачки, все зависит от ваших личных предпочтений и требований вашего приложения. Обычно количество, равное или вдвое превышающее объем оперативной памяти на вашей системе, является хорошей отправной точкой. Еще одним хорошим правилом является то, что если вы используете область подкачки только как резервную оперативную память, то все, что превышает 4 Гб, вероятно, излишне.

Шаг 3 – Создание файла подкачки

Теперь, когда мы знаем свободное место на жестком диске, мы можем создать файл подкачки в нашей файловой системе. Мы выделим файл нужного размера с именем swapfile в корневом (/) каталоге.

Лучший способ создания файла подкачки – использовать программу fallocate. Эта команда мгновенно создает файл заданного размера.

Поскольку сервер в нашем примере имеет 1 ГБ оперативной памяти, мы создадим файл размером 1 ГБ в этом руководстве. Подстройте это под нужды вашего собственного сервера:

  1. sudo fallocate -l 1G /swapfile

Мы можем проверить, что правильное количество места было выделено, набрав:

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

Наш файл был создан с правильным количествеством выделенного места.

Шаг 4 – Включение файла подкачки

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

Сначала нам нужно ограничить разрешения файла так, чтобы только пользователи с привилегиями root могли читать содержимое. Это предотвратит возможность доступа обычных пользователей к файлу, что имело бы значительные последствия для безопасности.

Сделайте файл доступным только для root, набрав:

  1. sudo chmod 600 /swapfile

Проверьте изменение разрешений, набрав:

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

Как видите, только пользователь root имеет разрешения на чтение и запись.

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

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

После отметки файла мы можем включить его в качестве файла подкачки, что позволит нашей системе начать его использование:

  1. sudo swapon /swapfile

Убедитесь, что файл подкачки доступен, набрав:

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

Мы можем снова проверить вывод утилиты free, чтобы подтвердить наши результаты:

  1. free -h
Output
total used free shared buff/cache available Mem: 981Mi 123Mi 644Mi 0.0Ki 213Mi 714Mi Swap: 1.0Gi 0B 1.0Gi

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

Шаг 5 – Создание постоянного файла подкачки

Наши последние изменения позволили использовать файл подкачки в текущей сессии. Однако при перезагрузке сервер не будет автоматически сохранять настройки подкачки. Мы можем изменить это, добавив файл подкачки в наш файл /etc/fstab.

Сделайте резервную копию файла /etc/fstab на случай возникновения проблем:

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

Добавьте информацию о файлах подкачки в конец вашего файла /etc/fstab, набрав:

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

Далее мы рассмотрим некоторые настройки, которые мы можем обновить для настройки нашего пространства подкачки.

Шаг 6 – Настройка параметров подкачки

Есть несколько параметров, которые вы можете настроить, которые окажут влияние на производительность вашей системы при работе с подкачкой.

Настройка свойства Swappiness

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

При значениях близких к нулю ядро не будет перемещать данные на диск, если это абсолютно необходимо. Помните, что операции с файлом подкачки “дорогие”, потому что они занимают гораздо больше времени, чем операции с ОЗУ, и могут привести к значительному снижению производительности. Сообщение системе не полагаться на подкачку слишком часто, обычно увеличит скорость работы вашей системы.

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

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

  1. cat /proc/sys/vm/swappiness
Output
60

Для настольного компьютера значение swappiness в 60 – это неплохое значение. Для сервера вы можете захотеть установить его ближе к 0.

Мы можем установить swappiness на другое значение, используя команду sysctl.

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

  1. sudo sysctl vm.swappiness=10
Output
vm.swappiness = 10

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

  1. sudo nano /etc/sysctl.conf

Внизу вы можете добавить:

/etc/sysctl.conf
vm.swappiness=10

Сохраните и закройте файл, когда закончите.

Настройка параметра Cache Pressure

Еще одно связанное значение, которое вы можете захотеть изменить, это vfs_cache_pressure. Этот параметр настраивает, насколько система будет предпочитать кешировать информацию о inode и dentry перед другими данными.

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

  1. cat /proc/sys/vm/vfs_cache_pressure
Output
100

Поскольку в настоящее время наша система удаляет информацию о inode из кэша слишком быстро, мы можем установить это на более консервативное значение, например, 50, набрав:

  1. sudo sysctl vm.vfs_cache_pressure=50
Output
vm.vfs_cache_pressure = 50

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

  1. sudo nano /etc/sysctl.conf

Внизу добавьте строку, которая устанавливает ваше новое значение:

/etc/sysctl.conf
vm.vfs_cache_pressure=50

Сохраните и закройте файл, когда закончите.

Заключение

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

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

Source:
https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-22-04