Как добавить пространство подкачки в Debian 11
Введение
Один из способов защититься от ошибок, связанных с нехваткой памяти в приложениях, — это добавить на сервер немного пространства подкачки. В этом руководстве мы расскажем, как добавить файл подкачки на сервер Debian 11.
Что такое своп?
Подкачка — это часть памяти на жестком диске, отведенная операционной системе для временного хранения данных, которые она больше не может хранить в ОЗУ. Это позволяет увеличить объем информации, которую ваш сервер может хранить в своей рабочей памяти, с некоторыми оговорками. Пространство подкачки на жестком диске будет использоваться в основном, когда в ОЗУ больше не будет достаточно места для хранения используемых данных приложения.
Информация, записываемая на диск, будет выполняться значительно медленнее, чем информация, хранящаяся в ОЗУ, но операционная система предпочтет хранить данные приложений в памяти и использовать подкачку для более старых данных. В целом, наличие пространства подкачки в качестве запасного варианта, когда ОЗУ вашей системы исчерпано, может быть хорошей защитой от исключений нехватки памяти в системах с доступным хранилищем, отличным от SSD.
Шаг 1 – Проверка системы на наличие информации о свопе
Прежде чем мы начнем, мы можем проверить, есть ли в системе место подкачки. Можно иметь несколько файлов подкачки или разделов подкачки, но обычно одного должно быть достаточно.
Мы можем увидеть, есть ли в системе какой-либо настроенный своп, набрав:
- sudo swapon --show
Если вы не получили никакого вывода, это означает, что в вашей системе в настоящее время нет места подкачки.
Проверить отсутствие активного свопа можно с помощью утилиты free
:
- free -h
Output total used free shared buff/cache available
Mem: 976Mi 75Mi 623Mi 0.0Ki 276Mi 765Mi
Swap: 0B 0B 0B
Как видно из строки вывода Swap, в системе не активен обмен.
Шаг 2 — Проверка свободного места на разделе жесткого диска
Прежде чем мы создадим наш файл подкачки, мы проверим текущее использование диска, чтобы убедиться, что у нас достаточно места. Сделайте это, введя:
- df -h
OutputFilesystem Size Used Avail Use% Mounted on
udev 472M 0 472M 0% /dev
tmpfs 98M 500K 98M 1% /run
/dev/vda1 25G 1.1G 23G 5% /
tmpfs 489M 0 489M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
/dev/vda15 124M 5.9M 118M 5% /boot/efi
tmpfs 98M 0 98M 0% /run/user/0
Устройство с /
в столбце Mounted on
в данном случае является нашим диском. В этом примере у нас достаточно свободного места (используется только 1,4 ГБ). Ваше использование, вероятно, будет другим.
Хотя существует множество мнений о подходящем размере пространства подкачки, на самом деле это зависит от ваших личных предпочтений и требований вашего приложения. Как правило, хорошей отправной точкой является объем, равный или удвоенный объем оперативной памяти в вашей системе. Еще одно хорошее эмпирическое правило заключается в том, что все, что превышает 4G подкачки, вероятно, не нужно, если вы просто используете его в качестве запасного варианта ОЗУ.
Шаг 3 – Создание файла подкачки
Теперь, когда мы знаем доступное место на жестком диске, мы можем создать файл подкачки в нашей файловой системе. Мы разместим файл нужного размера под названием swapfile
в нашем корневом (/
) каталоге.
Лучший способ создать файл подкачки — использовать программу fallocate
. Эта команда мгновенно создает файл указанного размера.
Поскольку сервер в нашем примере имеет 1 ГБ ОЗУ, в этом руководстве мы создадим файл размером 1 ГБ. Настройте это, чтобы удовлетворить потребности вашего собственного сервера:
- sudo fallocate -l 1G /swapfile
Мы можем убедиться, что зарезервировано правильное количество места, набрав:
- ls -lh /swapfile
- -rw-r--r-- 1 root root 1.0G Aug 23 11:14 /swapfile
Наш файл был создан с правильным объемом отведенного места.
Шаг 4 – Включение файла подкачки
Теперь, когда у нас есть файл нужного размера, нам нужно превратить его в пространство подкачки.
Во-первых, нам нужно заблокировать права доступа к файлу, чтобы только пользователи с привилегиями root могли читать его содержимое. Это не позволяет обычным пользователям получить доступ к файлу, что может иметь серьезные последствия для безопасности.
Сделайте файл доступным только для root, набрав:
- sudo chmod 600 /swapfile
Проверьте изменение разрешений, набрав:
- ls -lh /swapfile
Output-rw------- 1 root root 1.0G Aug 23 11:14 /swapfile
Как видите, флаги чтения и записи включены только для пользователя root.
Теперь мы можем пометить файл как пространство подкачки, набрав:
- sudo mkswap /swapfile
OutputSetting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf
После маркировки файла мы можем включить файл подкачки, что позволит нашей системе начать его использовать:
- sudo swapon /swapfile
Убедитесь, что своп доступен, набрав:
- sudo swapon --show
OutputNAME TYPE SIZE USED PRIO
/swapfile file 1024M 0B -2
Мы можем еще раз проверить вывод утилиты free
, чтобы подтвердить наши выводы:
- free -h
Output total used free shared buff/cache available
Mem: 976Mi 85Mi 612Mi 0.0Ki 279Mi 756Mi
Swap: 1.0Gi 0B 1.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
:
- sudo nano /etc/sysctl.conf
Внизу можно добавить:
vm.swappiness=10
Сохраните и закройте файл, когда закончите.
Настройка параметра давления кэша
Другое связанное значение, которое вы, возможно, захотите изменить, — это 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
Сохраните и закройте файл, когда закончите.
Заключение
Выполнение шагов, описанных в этом руководстве, даст вам некоторую передышку в случаях, которые в противном случае привели бы к исключениям из-за нехватки памяти. Пространство подкачки может быть невероятно полезным для предотвращения некоторых из этих распространенных проблем.
Если вы столкнулись с ошибками нехватки памяти или обнаружили, что ваша система не может использовать нужные вам приложения, лучшим решением будет оптимизация конфигураций приложений или обновление сервера.