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

Как добавить пространство подкачки в Rocky Linux 9


Введение

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

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

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

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

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

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

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

  1. sudo swapon --show

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

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

  1. free -h
Output
total used free shared buff/cache available Mem: 1.7Gi 173Mi 1.2Gi 9.0Mi 336Mi 1.4Gi Swap: 0B 0B 0B

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

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

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

  1. df -h
Output
Filesystem Size Used Avail Use% Mounted on devtmpfs 855M 0 855M 0% /dev tmpfs 888M 0 888M 0% /dev/shm tmpfs 355M 9.4M 346M 3% /run /dev/vda1 59G 1.4G 58G 3% / /dev/vda2 994M 155M 840M 16% /boot /dev/vda15 100M 7.0M 93M 7% /boot/efi tmpfs 178M 0 178M 0% /run/user/0

Устройство с / в столбце Mounted on в данном случае является нашим диском. В этом примере у нас достаточно свободного места (используется только 1,4 ГБ). Ваше использование, вероятно, будет другим.

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

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

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

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

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

  1. sudo fallocate -l 1G /swapfile

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

  1. ls -lh /swapfile
  1. -rw-r--r--. 1 root root 2.0G Sep 13 17:52 /swapfile

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

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

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

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

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

  1. sudo chmod 600 /swapfile

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

  1. ls -lh /swapfile
Output
-rw------- 1 root root 2.0G Sep 13 17:52 /swapfile

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

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

  1. sudo mkswap /swapfile
Output
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes) no label, UUID=585e8b33-30fa-481f-af61-37b13326545b

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

  1. sudo swapon /swapfile

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

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

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

  1. free -h
Output
total used free shared buff/cache available Mem: 1.7Gi 172Mi 1.2Gi 9.0Mi 338Mi 1.4Gi Swap: 2.0Gi 0B 2.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 определяет, как часто ваша система выгружает данные из ОЗУ в пространство подкачки. Это значение от 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.

Текстовый редактор по умолчанию, поставляемый с Rocky Linux 9, называется vi. vi — чрезвычайно мощный текстовый редактор, но он может быть несколько бестолковым для пользователей, не имеющих опыта работы с ним. Возможно, вы захотите установить более удобный редактор, такой как nano, чтобы упростить редактирование файлов конфигурации на вашем сервере Rocky Linux 9:

  1. sudo dnf install nano

Теперь вы можете использовать nano для редактирования файла sysctl.conf:

  1. sudo nano /etc/sysctl.conf

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

vm.swappiness=10

Сохраните и закройте файл, когда закончите. Если вы используете nano, вы можете сохранить и выйти, нажав CTRL + X, затем, когда будет предложено, Y, а затем Enter.

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

Другое связанное значение, которое вы, возможно, захотите изменить, — это 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

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

Заключение

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

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