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

Вступление

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

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

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

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

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

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

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

sudo swapon --show

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

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

free -h

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

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

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

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

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.4G). Ваше использование, вероятно, будет другим.

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

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

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

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

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

sudo fallocate -l 1G /swapfile

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

ls -lh /swapfile

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

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

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

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

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

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

sudo chmod 600 /swapfile

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

ls -lh /swapfile

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

Как видите, только у пользователя root включены флаги чтения и записи.

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

sudo mkswap /swapfile

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

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

sudo swapon /swapfile

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

sudo swapon --show

Output
NAME      TYPE  SIZE USED PRIO
/swapfile file 1024M   0B   -2

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

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 файла на случай, если что-то пойдет не так:

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

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

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

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

Шаг 6 - Настройка параметров свопинга

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

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

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

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

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

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

cat /proc/sys/vm/swappiness

Output
60

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

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

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

sudo sysctl vm.swappiness=10

Output
vm.swappiness = 10

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

sudo nano /etc/sysctl.conf

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

vm.swappiness=10

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

Регулировка настройки давления кэша

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

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

cat /proc/sys/vm/vfs_cache_pressure

Output
100

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

sudo sysctl vm.vfs_cache_pressure=50

Output
vm.vfs_cache_pressure = 50

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

sudo nano /etc/sysctl.conf

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

vm.vfs_cache_pressure=50

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

Заключение

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

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

Добавить комментарий

Автору будет очень приятно узнать обратную связь о своем руководстве.

Комментариев 0