Как добавить пространство подкачки в Rocky Linux 9
Введение
Один из способов защититься от ошибок, связанных с нехваткой памяти в приложениях, — это добавить на сервер немного пространства подкачки. В этом руководстве мы расскажем, как добавить файл подкачки на сервер Rocky Linux 9.
Что такое своп?
Подкачка — это часть памяти на жестком диске, отведенная операционной системе для временного хранения данных, которые она больше не может хранить в ОЗУ. Это позволяет увеличить объем информации, которую ваш сервер может хранить в своей рабочей памяти, с некоторыми оговорками. Пространство подкачки на жестком диске будет использоваться в основном, когда в ОЗУ больше не будет достаточно места для хранения используемых данных приложения.
Информация, записываемая на диск, будет выполняться значительно медленнее, чем информация, хранящаяся в ОЗУ, но операционная система предпочтет хранить данные приложений в памяти и использовать подкачку для более старых данных. В целом, наличие пространства подкачки в качестве запасного варианта, когда ОЗУ вашей системы исчерпано, может быть хорошей защитой от исключений нехватки памяти в системах с доступным хранилищем, отличным от SSD.
Шаг 1 – Проверка системы на наличие информации о свопе
Прежде чем мы начнем, мы можем проверить, есть ли в системе место подкачки. Можно иметь несколько файлов подкачки или разделов подкачки, но обычно одного должно быть достаточно.
Мы можем увидеть, есть ли в системе какой-либо настроенный своп, набрав:
- sudo swapon --show
Если вы не получили никакого вывода, это означает, что в вашей системе в настоящее время нет места подкачки.
Проверить отсутствие активного свопа можно с помощью утилиты free
:
- 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 — Проверка свободного места на разделе жесткого диска
Прежде чем мы создадим наш файл подкачки, мы проверим текущее использование диска, чтобы убедиться, что у нас достаточно места. Сделайте это, введя:
- df -h
OutputFilesystem 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 ГБ. Настройте это, чтобы удовлетворить потребности вашего собственного сервера:
- sudo fallocate -l 1G /swapfile
Мы можем убедиться, что зарезервировано правильное количество места, набрав:
- ls -lh /swapfile
- -rw-r--r--. 1 root root 2.0G Sep 13 17:52 /swapfile
Наш файл был создан с правильным объемом отведенного места.
Шаг 4 – Включение файла подкачки
Теперь, когда у нас есть файл нужного размера, нам нужно превратить его в пространство подкачки.
Во-первых, нам нужно заблокировать права доступа к файлу, чтобы только пользователи с привилегиями root могли читать его содержимое. Это не позволяет обычным пользователям получить доступ к файлу, что может иметь серьезные последствия для безопасности.
Сделайте файл доступным только для root, набрав:
- sudo chmod 600 /swapfile
Проверьте изменение разрешений, набрав:
- ls -lh /swapfile
Output-rw------- 1 root root 2.0G Sep 13 17:52 /swapfile
Как видите, флаги чтения и записи включены только для пользователя root.
Теперь мы можем пометить файл как пространство подкачки, набрав:
- sudo mkswap /swapfile
OutputSetting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=585e8b33-30fa-481f-af61-37b13326545b
После маркировки файла мы можем включить файл подкачки, что позволит нашей системе начать его использовать:
- sudo swapon /swapfile
Убедитесь, что своп доступен, набрав:
- sudo swapon --show
OutputNAME TYPE SIZE USED PRIO
/swapfile file 2G 0B -2
Мы можем еще раз проверить вывод утилиты free
, чтобы подтвердить наши выводы:
- 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
на случай, если что-то пойдет не так:
- sudo cp /etc/fstab /etc/fstab.bak
Добавьте информацию о файле подкачки в конец файла /etc/fstab
, набрав:
- echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Далее мы рассмотрим некоторые настройки, которые мы можем обновить, чтобы настроить наше пространство подкачки.
Шаг 6 – Настройка параметров свопа
Вы можете настроить несколько параметров, которые повлияют на производительность вашей системы при работе с свопом.
Настройка свойства подкачки
Параметр swappiness
определяет, как часто ваша система выгружает данные из ОЗУ в пространство подкачки. Это значение от 0 до 100, представляющее процент.
При значениях, близких к нулю, ядро не будет выгружать данные на диск без крайней необходимости. Помните, что взаимодействие с файлом подкачки является «дорогим» в том смысле, что оно занимает намного больше времени, чем взаимодействие с оперативной памятью, и может привести к значительному снижению производительности. Указание системе не слишком полагаться на файл подкачки, как правило, сделает вашу систему быстрее.
Значения, близкие к 100, будут пытаться поместить больше данных в своп, чтобы освободить больше места в ОЗУ. В зависимости от профиля памяти ваших приложений или того, для чего вы используете свой сервер, в некоторых случаях это может быть лучше.
Мы можем увидеть текущее значение swappiness, набрав:
- cat /proc/sys/vm/swappiness
Output60
Для рабочего стола параметр swappiness 60 не является плохим значением. Для сервера вы можете переместить его ближе к 0.
Мы можем установить для swappiness другое значение с помощью команды sysctl
.
Например, чтобы установить swappiness равным 10, мы могли бы ввести:
- sudo sysctl vm.swappiness=10
Outputvm.swappiness = 10
Этот параметр сохранится до следующей перезагрузки. Мы можем установить это значение автоматически при перезапуске, добавив строку в наш файл /etc/sysctl.conf
.
Текстовый редактор по умолчанию, поставляемый с Rocky Linux 9, называется vi
. vi
— чрезвычайно мощный текстовый редактор, но он может быть несколько бестолковым для пользователей, не имеющих опыта работы с ним. Возможно, вы захотите установить более удобный редактор, такой как nano
, чтобы упростить редактирование файлов конфигурации на вашем сервере Rocky Linux 9:
- sudo dnf install nano
Теперь вы можете использовать nano
для редактирования файла sysctl.conf
:
- sudo nano /etc/sysctl.conf
Внизу можно добавить:
vm.swappiness=10
Сохраните и закройте файл, когда закончите. Если вы используете nano
, вы можете сохранить и выйти, нажав CTRL + X
, затем, когда будет предложено, Y
, а затем Enter.
Настройка параметра давления кэша
Другое связанное значение, которое вы, возможно, захотите изменить, — это vfs_cache_pressure
. Этот параметр определяет, насколько система будет кэшировать информацию inode и dentry по сравнению с другими данными.
Это данные доступа к файловой системе. Как правило, это очень дорого для поиска и очень часто запрашивается, поэтому для вашей системы отлично подходит кеширование. Вы можете увидеть текущее значение, снова запросив файловую систему proc
:
- cat /proc/sys/vm/vfs_cache_pressure
Output100
В текущих настройках наша система слишком быстро удаляет информацию об индексных дескрипторах из кеша. Мы можем установить более консервативное значение, например 50, набрав:
- sudo sysctl vm.vfs_cache_pressure=50
Outputvm.vfs_cache_pressure = 50
Опять же, это действительно только для нашего текущего сеанса. Мы можем изменить это, добавив его в наш файл конфигурации, как мы сделали с нашей настройкой swappiness:
- sudo nano /etc/sysctl.conf
Внизу добавьте строку, указывающую новое значение:
vm.vfs_cache_pressure=50
Сохраните и закройте файл, когда закончите.
Заключение
Выполнение шагов, описанных в этом руководстве, даст вам некоторую передышку в случаях, которые в противном случае привели бы к исключениям из-за нехватки памяти. Пространство подкачки может быть невероятно полезным для предотвращения некоторых из этих распространенных проблем.
Если вы столкнулись с ошибками нехватки памяти или обнаружили, что ваша система не может использовать нужные вам приложения, лучшим решением будет оптимизация конфигураций приложений или обновление сервера.