Введение
Один из способов защиты от ошибок нехватки памяти в приложениях – добавить некоторое пространство подкачки на ваш сервер. В этом руководстве мы рассмотрим, как добавить файл подкачки на сервер Ubuntu 22.04.
Что такое подкачка?
Подкачка – это часть пространства на жестком диске, которая выделена операционной системой для временного хранения данных, которые она больше не может хранить в ОЗУ. Это позволяет увеличить объем информации, который ваш сервер может сохранить в рабочей памяти, с некоторыми оговорками. Пространство подкачки на жестком диске будет использоваться в основном, когда в ОЗУ больше не хватает места для хранения данных приложений, используемых в данный момент.
Информация, записываемая на диск, будет значительно медленнее, чем информация, хранящаяся в ОЗУ, но операционная система предпочтет сохранять данные приложений в памяти и использовать подкачку для более старых данных. В целом, наличие подкачки в качестве запасного варианта, когда ОЗУ вашей системы исчерпана, может быть хорошей защитой от исключений из-за нехватки памяти на системах с доступным хранилищем, не являющимся SSD.
Шаг 1 – Проверка системы на наличие информации о подкачке
Прежде чем мы начнем, мы можем проверить, есть ли уже доступное пространство подкачки на системе. Возможно наличие нескольких файлов подкачки или разделов подкачки, но обычно достаточно одного.
Мы можем узнать, есть ли на системе настроенная подкачка, набрав:
Если вы не получаете никакого вывода, это означает, что в данный момент на вашей системе нет доступного пространства подкачки.
Вы можете проверить, есть ли активная подкачка, используя утилиту free
:
Output total used free shared buff/cache available
Mem: 981Mi 122Mi 647Mi 0.0Ki 211Mi 714Mi
Swap: 0B 0B 0B
Как видно в строке Подкачка вывода, на системе нет активной подкачки.
Шаг 2 – Проверка доступного места на разделе жесткого диска
Прежде чем мы создадим наш файл подкачки, мы проверим текущее использование диска, чтобы убедиться, что у нас достаточно места. Сделайте это, введя:
OutputFilesystem Size Used Avail Use% Mounted on
udev 474M 0 474M 0% /dev
tmpfs 99M 932K 98M 1% /run
/dev/vda1 25G 1.4G 23G 7% /
tmpfs 491M 0 491M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 491M 0 491M 0% /sys/fs/cgroup
/dev/vda15 105M 3.9M 101M 4% /boot/efi
/dev/loop0 55M 55M 0 100% /snap/core18/1705
/dev/loop1 69M 69M 0 100% /snap/lxd/14804
/dev/loop2 28M 28M 0 100% /snap/snapd/7264
tmpfs 99M 0 99M 0% /run/user/1000
Устройство с /
в столбце Смонтирован на
является нашим диском в данном случае. У нас достаточно места доступно в этом примере (использовано только 1.4G). Ваше использование вероятно будет отличаться.
Хотя существует множество мнений о подходящем размере области подкачки, все зависит от ваших личных предпочтений и требований вашего приложения. Обычно количество, равное или вдвое превышающее объем оперативной памяти на вашей системе, является хорошей отправной точкой. Еще одним хорошим правилом является то, что если вы используете область подкачки только как резервную оперативную память, то все, что превышает 4 Гб, вероятно, излишне.
Шаг 3 – Создание файла подкачки
Теперь, когда мы знаем свободное место на жестком диске, мы можем создать файл подкачки в нашей файловой системе. Мы выделим файл нужного размера с именем swapfile
в корневом (/
) каталоге.
Лучший способ создания файла подкачки – использовать программу fallocate
. Эта команда мгновенно создает файл заданного размера.
Поскольку сервер в нашем примере имеет 1 ГБ оперативной памяти, мы создадим файл размером 1 ГБ в этом руководстве. Подстройте это под нужды вашего собственного сервера:
Мы можем проверить, что правильное количество места было выделено, набрав:
Наш файл был создан с правильным количествеством выделенного места.
Шаг 4 – Включение файла подкачки
Теперь, когда у нас есть файл правильного размера, нам нужно превратить его в файл подкачки.
Сначала нам нужно ограничить разрешения файла так, чтобы только пользователи с привилегиями root могли читать содержимое. Это предотвратит возможность доступа обычных пользователей к файлу, что имело бы значительные последствия для безопасности.
Сделайте файл доступным только для root, набрав:
Проверьте изменение разрешений, набрав:
Output-rw------- 1 root root 1.0G Apr 25 11:14 /swapfile
Как видите, только пользователь root имеет разрешения на чтение и запись.
Теперь мы можем отметить файл как файл подкачки, набрав:
OutputSetting up swapspace version 1, size = 1024 MiB (1073737728 bytes)
no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf
После отметки файла мы можем включить его в качестве файла подкачки, что позволит нашей системе начать его использование:
Убедитесь, что файл подкачки доступен, набрав:
OutputNAME TYPE SIZE USED PRIO
/swapfile file 1024M 0B -2
Мы можем снова проверить вывод утилиты free
, чтобы подтвердить наши результаты:
Output total used free shared buff/cache available
Mem: 981Mi 123Mi 644Mi 0.0Ki 213Mi 714Mi
Swap: 1.0Gi 0B 1.0Gi
Наши настройки файла подкачки были успешно завершены, и наша операционная система начнет его использование по мере необходимости.
Шаг 5 – Создание постоянного файла подкачки
Наши последние изменения позволили использовать файл подкачки в текущей сессии. Однако при перезагрузке сервер не будет автоматически сохранять настройки подкачки. Мы можем изменить это, добавив файл подкачки в наш файл /etc/fstab
.
Сделайте резервную копию файла /etc/fstab
на случай возникновения проблем:
Добавьте информацию о файлах подкачки в конец вашего файла /etc/fstab
, набрав:
Далее мы рассмотрим некоторые настройки, которые мы можем обновить для настройки нашего пространства подкачки.
Шаг 6 – Настройка параметров подкачки
Есть несколько параметров, которые вы можете настроить, которые окажут влияние на производительность вашей системы при работе с подкачкой.
Настройка свойства Swappiness
Параметр swappiness
настраивает, как часто ваша система перемещает данные из ОЗУ на пространство подкачки. Это значение между 0 и 100, которое представляет собой процент.
При значениях близких к нулю ядро не будет перемещать данные на диск, если это абсолютно необходимо. Помните, что операции с файлом подкачки “дорогие”, потому что они занимают гораздо больше времени, чем операции с ОЗУ, и могут привести к значительному снижению производительности. Сообщение системе не полагаться на подкачку слишком часто, обычно увеличит скорость работы вашей системы.
Значения, близкие к 100, будут пытаться перемещать больше данных в подкачку, чтобы сохранить больше свободного места в ОЗУ. В зависимости от профиля памяти ваших приложений или того, для чего вы используете свой сервер, в некоторых случаях это может быть лучше.
Мы можем увидеть текущее значение swappiness, набрав:
Output60
Для настольного компьютера значение swappiness в 60 – это неплохое значение. Для сервера вы можете захотеть установить его ближе к 0.
Мы можем установить swappiness на другое значение, используя команду sysctl
.
Например, чтобы установить swappiness на 10, мы можем набрать:
Outputvm.swappiness = 10
Этот параметр сохранится до следующей перезагрузки. Мы можем автоматически установить это значение при перезагрузке, добавив строку в наш файл /etc/sysctl.conf
:
Внизу вы можете добавить:
vm.swappiness=10
Сохраните и закройте файл, когда закончите.
Настройка параметра Cache Pressure
Еще одно связанное значение, которое вы можете захотеть изменить, это vfs_cache_pressure
. Этот параметр настраивает, насколько система будет предпочитать кешировать информацию о inode и dentry перед другими данными.
По сути, это данные доступа о файловой системе. Это обычно очень затратно для поиска и часто запрашивается, поэтому это отличное решение для вашей системы, чтобы кешировать. Вы можете увидеть текущее значение, запросив файловую систему proc
снова:
Output100
Поскольку в настоящее время наша система удаляет информацию о inode из кэша слишком быстро, мы можем установить это на более консервативное значение, например, 50, набрав:
Outputvm.vfs_cache_pressure = 50
Опять же, это действует только в рамках текущей сессии. Мы можем изменить это, добавив это в наш файл конфигурации, как мы сделали с настройкой swappiness:
Внизу добавьте строку, которая устанавливает ваше новое значение:
vm.vfs_cache_pressure=50
Сохраните и закройте файл, когда закончите.
Заключение
Следуя этим шагам в данном руководстве, вы получите некоторое дополнительное пространство в случаях, которые иначе могли бы привести к исключениям из-за нехватки памяти. Пространство подкачки может быть чрезвычайно полезным для избежания некоторых из этих распространенных проблем.
Если у вас возникают ошибки OOM (out of memory), или если вы обнаруживаете, что ваша система не может использовать необходимые вам приложения, лучшим решением будет оптимизация конфигураций ваших приложений или обновление вашего сервера.
Source:
https://www.digitalocean.com/community/tutorials/how-to-add-swap-space-on-ubuntu-22-04