Поиск по сайту:

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


Предыдущая версия этого руководства была написана Джастином Эллингвудом

Введение

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

Что такое своп?

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

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

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

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

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

  1. sudo swapon --show

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

Проверить отсутствие активного свопа можно с помощью утилиты free:

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

Как видно из строки вывода Swap, в системе не активен обмен.

Шаг 2 — Проверка свободного места на разделе жесткого диска

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

  1. df -h
Output
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 в данном случае является нашим диском. В этом примере у нас достаточно свободного места (используется только 1,4 ГБ). Ваше использование, вероятно, будет другим.

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

Шаг 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: 985M 84M 220M 680K 680M 722M Swap: 1.0G 0B 1.0G

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

Шаг 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 определяет, как часто ваша система выгружает данные из ОЗУ в пространство подкачки. Это значение от 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

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

vm.swappiness=10

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

Настройка параметра давления кэша

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

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

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

В текущих настройках наша система слишком быстро удаляет информацию об индексных дескрипторах из кеша. Мы можем установить более консервативное значение, например 50, набрав:

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

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

  1. sudo nano /etc/sysctl.conf

Внизу добавьте строку, указывающую новое значение:

vm.vfs_cache_pressure=50

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

Заключение

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

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