Как добавить пространство подкачки в Ubuntu 18.04
Вступление
Одним из самых простых способов защиты от ошибок нехватки памяти в приложениях является добавление некоторого пространства подкачки на ваш сервер. В этом руководстве мы расскажем, как добавить файл подкачки на сервер Ubuntu 18.04.Что такое своп?
Подкачка - это область на жестком диске, обозначенная как место, где операционная система может временно хранить данные, которые она больше не может хранить в оперативной памяти. По сути, это дает вам возможность увеличить объем информации, которую ваш сервер может хранить в своей рабочей «памяти», с некоторыми оговорками. Пространство подкачки на жестком диске будет использоваться в основном, когда в ОЗУ больше нет места для хранения данных приложения.Информация, записываемая на диск, будет значительно медленнее, чем информация, хранящаяся в ОЗУ, но операционная система предпочтет сохранить данные приложения в памяти и использовать подкачку для более старых данных. В целом, использование пространства подкачки в качестве запасного варианта, когда ОЗУ вашей системы истощается, может быть хорошей защитой от исключений нехватки памяти в системах с доступным хранилищем без 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
total used free shared buff/cache available
Mem: 985M 84M 222M 680K 678M 721M
Swap: 0B 0B 0B
Как вы можете видеть в свопе строке вывода, не подкачки не активны в системе.
Шаг 2 - Проверка доступного пространства на разделе жесткого диска
Прежде чем мы создадим наш файл подкачки, мы проверим текущее использование диска, чтобы убедиться, что у нас достаточно места. Сделайте это, введя:df -h
Output
Filesystem 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
Filesystem 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.4G). Ваше использование, вероятно, будет другим.
Хотя существует множество мнений относительно подходящего размера пространства подкачки, оно действительно зависит от ваших личных предпочтений и требований вашего приложения. Как правило, объем, равный или удвоенный объем оперативной памяти в вашей системе, является хорошей отправной точкой. Другое хорошее практическое правило заключается в том, что что-либо более чем 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
-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
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
NAME 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
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
swappiness Параметр определяет, как часто ваша система обменивает данные из оперативной памяти в пространстве подкачки. Это значение от 0 до 100, которое представляет собой процент.При значениях, близких к нулю, ядро не будет выгружать данные на диск без крайней необходимости. Помните, что взаимодействие с файлом подкачки «дорого», так как оно занимает намного больше времени, чем взаимодействие с ОЗУ, и может привести к значительному снижению производительности. Указание системе не полагаться на своп слишком часто сделает вашу систему быстрее.
Значения, близкие к 100, будут пытаться поместить больше данных в раздел подкачки, чтобы освободить больше места в ОЗУ. В зависимости от профиля памяти ваших приложений или того, для чего вы используете сервер, в некоторых случаях это может быть лучше.
Мы можем увидеть текущее значение подкачки, набрав:
cat /proc/sys/vm/swappiness
Output
60
60
Для рабочего стола настройка перестановки 60 не является плохим значением. Для сервера вы можете переместить его ближе к 0.
Мы можем установить swappiness в другое значение с помощью sysctl команды.
Например, чтобы установить swappiness на 10, мы могли бы набрать:
sudo sysctl vm.swappiness=10
Output
vm.swappiness = 10
vm.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
Output
100
100
В настоящее время наша система слишком быстро удаляет информацию об индексах из кэша. Мы можем установить более консервативную настройку, например, 50, набрав:
sudo sysctl vm.vfs_cache_pressure=50
Output
vm.vfs_cache_pressure = 50
vm.vfs_cache_pressure = 50
Опять же, это действительно только для нашей текущей сессии. Мы можем изменить это, добавив его в наш файл конфигурации, как мы сделали с нашей настройкой swappiness:
sudo nano /etc/sysctl.conf
Внизу добавьте строку, которая задает ваше новое значение:
vm.vfs_cache_pressure=50
Сохраните и закройте файл, когда вы закончите.
Заключение
Выполнение шагов, описанных в этом руководстве, даст вам некоторое пространство для дыхания в случаях, которые в противном случае привели бы к исключениям нехватки памяти. Пространство подкачки может быть невероятно полезным, чтобы избежать некоторых из этих распространенных проблем.Если вы сталкиваетесь с ошибками OOM (нехватка памяти) или обнаруживаете, что ваша система не может использовать приложения, которые вам нужны, лучшее решение - оптимизировать конфигурации приложений или обновить сервер.
Комментариев 0