Поиск по сайту:

Как добавить пространство подкачки в Ubuntu 16.04


Введение

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

Что такое своп?

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

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

Проверьте систему на наличие информации о свопе

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

Мы можем увидеть, есть ли в системе какой-либо настроенный своп, набрав:

  1. sudo swapon --show

Если вы не получили никакого вывода, это означает, что в вашей системе в настоящее время нет места подкачки.

Проверить отсутствие активного свопа можно с помощью утилиты free:

  1. free -h
Output
total used free shared buff/cache available Mem: 488M 36M 104M 652K 348M 426M Swap: 0B 0B 0B

Как вы можете видеть в строке \Swap вывода, в системе не активен обмен.

Проверьте свободное место на разделе жесткого диска

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

Прежде чем мы это сделаем, мы должны проверить текущее использование диска, набрав:

  1. df -h
Output
Filesystem Size Used Avail Use% Mounted on udev 238M 0 238M 0% /dev tmpfs 49M 624K 49M 2% /run /dev/vda1 20G 1.1G 18G 6% / tmpfs 245M 0 245M 0% /dev/shm tmpfs 5.0M 0 5.0M 0% /run/lock tmpfs 245M 0 245M 0% /sys/fs/cgroup tmpfs 49M 0 49M 0% /run/user/1001

Устройство под /dev в данном случае является нашим диском. В этом примере у нас достаточно свободного места (используется только 1,1 ГБ). Ваше использование, вероятно, будет другим.

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

Создать файл подкачки

Теперь, когда мы знаем доступное место на жестком диске, мы можем приступить к созданию файла подкачки в нашей файловой системе. Мы создадим файл нужного нам размера подкачки с именем swapfile в нашем корневом (/) каталоге.

Лучший способ создать файл подкачки — использовать программу fallocate. Эта команда мгновенно создает файл заданного размера.

Поскольку сервер в нашем примере имеет 512 МБ ОЗУ, в этом руководстве мы создадим файл размером 1 гигабайт. Настройте это, чтобы удовлетворить потребности вашего собственного сервера:

  1. sudo fallocate -l 1G /swapfile

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

  1. ls -lh /swapfile
  1. -rw-r--r-- 1 root root 1.0G Apr 25 11:14 /swapfile

Наш файл был создан с правильным объемом отведенного места.

Включение файла подкачки

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

Во-первых, нам нужно заблокировать права доступа к файлу, чтобы только пользователи с правами root могли читать его содержимое. Это не позволяет обычным пользователям получить доступ к файлу, что может иметь серьезные последствия для безопасности.

Сделайте файл доступным только для root, набрав:

  1. sudo chmod 600 /swapfile

Проверьте изменение разрешений, набрав:

  1. ls -lh /swapfile
Output
-rw------- 1 root root 1.0G Apr 25 11:14 /swapfile

Как видите, флаги чтения и записи включены только для пользователя root.

Теперь мы можем пометить файл как пространство подкачки, набрав:

  1. sudo mkswap /swapfile
Output
Setting up swapspace version 1, size = 1024 MiB (1073737728 bytes) no label, UUID=6e965805-2ab9-450f-aed6-577e74089dbf

После маркировки файла мы можем включить файл подкачки, что позволит нашей системе начать его использовать:

  1. sudo swapon /swapfile

Мы можем убедиться, что своп доступен, набрав:

  1. sudo swapon --show
Output
NAME TYPE SIZE USED PRIO /swapfile file 1024M 0B -1

Мы можем еще раз проверить вывод утилиты free, чтобы подтвердить наши выводы:

  1. free -h
Output
total used free shared buff/cache available Mem: 488M 37M 96M 652K 354M 425M Swap: 1.0G 0B 1.0G

Наш своп был успешно настроен, и наша операционная система начнет использовать его по мере необходимости.

Сделать файл подкачки постоянным

Наши недавние изменения включили файл подкачки для текущего сеанса. Однако, если мы перезагрузимся, сервер не сохранит настройки подкачки автоматически. Мы можем изменить это, добавив файл подкачки в наш файл /etc/fstab.

Создайте резервную копию файла /etc/fstab на случай, если что-то пойдет не так:

  1. sudo cp /etc/fstab /etc/fstab.bak

Вы можете добавить информацию о файле подкачки в конец файла /etc/fstab, набрав:

  1. echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

Измените настройки обмена

Вы можете настроить несколько параметров, которые повлияют на производительность вашей системы при работе с свопом.

Настройка свойства подкачки

Параметр swappiness определяет, как часто ваша система выгружает данные из ОЗУ в пространство подкачки. Это значение от 0 до 100, представляющее процент.

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

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

Мы можем увидеть текущее значение swappiness, набрав:

  1. cat /proc/sys/vm/swappiness
Output
60

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

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

Например, чтобы установить swappiness равным 10, мы могли бы ввести:

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

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

  1. sudo nano /etc/sysctl.conf

Внизу можно добавить:

vm.swappiness=10

Сохраните и закройте файл, когда закончите.

Настройка параметра давления кэша

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

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

  1. cat /proc/sys/vm/vfs_cache_pressure
Output
100

В текущих настройках наша система слишком быстро удаляет информацию об индексных дескрипторах из кеша. Мы можем установить более консервативное значение, например 50, набрав:

  1. sudo sysctl vm.vfs_cache_pressure=50
Output
vm.vfs_cache_pressure = 50

Опять же, это действительно только для нашего текущего сеанса. Мы можем изменить это, добавив его в наш файл конфигурации, как мы сделали с нашей настройкой swappiness:

  1. sudo nano /etc/sysctl.conf

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

vm.vfs_cache_pressure=50

Сохраните и закройте файл, когда закончите.

Заключение

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

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