Введение

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

​​[warning]
Предупреждение. Хотя подкачка в целом рекомендуется для систем с использованием традиционных жестких дисков, ее использование с SSD-накопителями может со временем вызывать ухудшение работоспособности аппаратного обеспечения. В связи с этим мы не рекомендуем активировать подкачку при использовании услуг DigitalOcean или любого другого провайдера, применяющего SSD-накопители.

<$>

Что такое подкачка?

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

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

Шаг 1 — Проверка информации о подкачке в системе

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

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

  • sudo swapon --show

Если после этой команды ничего не появляется, в системе сейчас нет области подкачки.

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

  • free -h
Output
total used free shared buff/cache available Mem: 981Mi 122Mi 647Mi 0.0Ki 211Mi 714Mi Swap: 0B 0B 0B

В строке ​​​Swap видно​​​, что в системе отсутствует активная подкачка.

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

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

  • df -h
Output
Filesystem 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

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

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

Шаг 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: 981Mi 123Mi 644Mi 0.0Ki 213Mi 714Mi 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

Параметр swappiness определяет, как часто система выгружает данные из оперативной памяти в пространство подкачки. Его значение выражается числом от 0 до 100 процентов.

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

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

Можем увидеть текущее значение фактора swappiness, введя следующее:

  • cat /proc/sys/vm/swappiness
Output
60

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

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

Например, чтобы установить значение swappiness 10, можно ввести следующее:

  • sudo sysctl vm.swappiness=10
Output
vm.swappiness = 10

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

  • sudo nano /etc/sysctl.conf

Внизу можно ввести следующее:

/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

Внизу добавьте строку с новым значением:

/etc/sysctl.conf
vm.vfs_cache_pressure=50

Сохраните и закройте файл после завершения.

Заключение

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

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

0 Comments

Creative Commons License