Как добавить пространство подкачки в Ubuntu 18.04
Предыдущая версия этого руководства была написана Джастином Эллингвудом
Введение
Одним из самых простых способов защиты от ошибок нехватки памяти в приложениях является добавление на сервер некоторого пространства подкачки. В этом руководстве мы расскажем, как добавить файл подкачки на сервер Ubuntu 18.04.
Что такое своп?
Swap – это область на жестком диске, предназначенная для временного хранения операционной системой данных, которые она больше не может хранить в ОЗУ. По сути, это дает вам возможность увеличить объем информации, которую ваш сервер может хранить в своей рабочей «памяти», с некоторыми оговорками. Пространство подкачки на жестком диске будет использоваться в основном, когда в оперативной памяти больше не будет достаточно места. для хранения используемых данных приложения.
Информация, записываемая на диск, будет выполняться значительно медленнее, чем информация, хранящаяся в ОЗУ, но операционная система предпочтет хранить данные приложений в памяти и использовать подкачку для более старых данных. В целом, наличие пространства подкачки в качестве запасного варианта, когда ОЗУ вашей системы исчерпано, может быть хорошей защитой от исключений нехватки памяти в системах с доступным хранилищем, отличным от SSD.
Шаг 1 – Проверка системы на наличие информации о свопе
Прежде чем мы начнем, мы можем проверить, есть ли в системе место подкачки. Можно иметь несколько файлов подкачки или разделов подкачки, но обычно одного должно быть достаточно.
Мы можем увидеть, есть ли в системе какой-либо настроенный своп, набрав:
- sudo swapon --show
Если вы не получили никакого вывода, это означает, что в вашей системе в настоящее время нет места подкачки.
Проверить отсутствие активного свопа можно с помощью утилиты free
:
- free -h
Output total used free shared buff/cache available
Mem: 985M 84M 222M 680K 678M 721M
Swap: 0B 0B 0B
Как видно из строки вывода Swap, в системе не активен обмен.
Шаг 2 — Проверка свободного места на разделе жесткого диска
Прежде чем мы создадим наш файл подкачки, мы проверим текущее использование диска, чтобы убедиться, что у нас достаточно места. Сделайте это, введя:
- df -h
OutputFilesystem Size Used Avail Use% Mounted on
udev 481M 0 481M 0% /dev
tmpfs 99M 656K 98M 1% /run
/dev/vda1 25G 1.4G 23G 6% /
tmpfs 493M 0 493M 0% /dev/shm
tmpfs 5.0M 0 5.0M 0% /run/lock
tmpfs 493M 0 493M 0% /sys/fs/cgroup
/dev/vda15 105M 3.4M 102M 4% /boot/efi
tmpfs 99M 0 99M 0% /run/user/1000
Устройство с /
в столбце 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 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
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: 985M 84M 220M 680K 680M 722M
Swap: 1.0G 0B 1.0G
Наш своп был успешно настроен, и наша операционная система начнет использовать его по мере необходимости.
Шаг 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
Сохраните и закройте файл, когда закончите.
Заключение
Выполнение шагов, описанных в этом руководстве, даст вам некоторую передышку в случаях, которые в противном случае привели бы к исключениям из-за нехватки памяти. Пространство подкачки может быть невероятно полезным для предотвращения некоторых из этих распространенных проблем.
Если вы сталкиваетесь с ошибками OOM (недостаточно памяти) или если вы обнаружите, что ваша система не может использовать нужные вам приложения, лучшим решением будет оптимизация конфигураций ваших приложений или обновление сервера.