Как добавить своп на CentOS 7

Своп (англ. Swap) – один из самых простых способов повысить реакцию сервера и предотвратить ошибки приложения «out of memory». Своп – это область на накопителе, в которой операционная система может временно хранить данные, которые больше не могут находиться в памяти. Это увеличивает количество информации, которое может храниться на сервере, но при этом нужно учитывать некоторые нюансы: обработка информации в области своп намного медленнее, чем в памяти. Тем не менее, своп может защитить сервер от ошибок, связанных с нехваткой памяти. Если у сервера без активированного своп-пространства закончится память, он начнет останавливать приложения, чтоб освободить нужный объем памяти, что может привести к аварийным отказам и сбоям. Своп необходим некоторым приложениям для того, чтобы обеспечить надежный и бесперебойный доступ к данным. В данном руководстве показано, как создать и включить своп-файл на сервере CentOS 7.

Требования

Для начала нужно подготовить систему. Чтобы следовать данному руководству, необходимо предварительно настроить сервер CentOS 7 и создать нового пользователя с расширенными привилегиями (sudo). Чтобы получить инструкции по начальной настройке сервера CentOS 7, читайте эту статью. Выполнив все предварительные требования, создайте SSH-подключение к серверу и приступайте к созданию своп-файла.

Проверка системы на swap

Для начала нужно проверить сервер на наличие активированного своп-пространства. На самом деле, в рамках одной системы можно создать несколько областей своп, но в целом одной своп-области будет достаточно. Узнать, есть ли активное swap-пространство в текущей системе, можно при помощи утилиты общего назначения swapon. Запущенная с флагом -s, swapon выведет общую информацию об использовании своп и наличие своп-пространства на устройстве хранения. swapon -s Если эта команда ничего не вернула, значит, в данной системе нет активного своп-файла. Есть еще один способ проверить систему на наличие своп-пространства – это утилита free, которая показывает общее использование памяти системы. Чтобы узнать текущее состояние памяти и использование свопа (в мегабайтах), введите: free -m total       used       free     shared    buffers     cached Mem:          3953        315       3637          8         11        107 -/+ buffers/cache:        196       3756 Swap:            0          0       4095 Как видите, общий размер своп-пространства равен нулю, а значит, активного своп-файла в системе нет. Результат совпал с данными команды swapon.

Доступное пространство на жестком диске

Как правило, в качестве swap-пространства используется специально выделенная область диска. Тем не менее, изменить схему разбиения диска не всегда возможно. В таком случае swap-файл можно создать в уже существующем разделе. Прежде чем приступить к созданию такого файла, нужно узнать текущее состояние диска. Чтобы получить эту информацию, введите: df -h Filesystem      Size  Used Avail Use% Mounted on /dev/vda1        59G  1.5G   55G   3% / devtmpfs        2.0G     0  2.0G   0% /dev tmpfs           2.0G     0  2.0G   0% /dev/shm tmpfs           2.0G  8.3M  2.0G   1% /run tmpfs           2.0G     0  2.0G   0% /sys/fs/cgroup

Примечание: флаг -h выводит информацию в удобном для восприятия человеком формате. То есть,  вместо того, чтобы выводить необработанный ряд блоков памяти, команда df -h покажет использование памяти и доступное пространство в мегабайтах (М) или гигабайтах (G).

Как видите, в этом случае первая строка результата сообщает, что на жестком диске доступно 59 гигабайт, чего более чем достаточно для нового VPS среднего размера; конечно, фактическое использование памяти и параметры сервера могут отличаться. Существует множество мнений о «правильном» размере своп-пространства. В целом, это зависит от требований системы и личных предпочтений пользователя. Как правило, swap-пространство должно быть равно или вдвое больше объема оперативной памяти системы. В этом вопросе нужно ориентироваться на свободное дисковое пространство. Например, если RAM системы – 4 гигабайта, а вдвое большее swap-пространство (т.е., 8 гигабайт) займет существенную часть дискового пространства, нужно создать swap не более 4 гигабайт.

Создание своп-файла

Ознакомившись с важными моментами установки своп-пространства, а также узнав доступное пространство жесткого диска, приступайте к созданию своп-файла в данной файловой системе. В этом  руководстве такой файл называется swapfile и находится в root-каталоге (/); конечно, назвать и разместить файл можно согласно собственным предпочтениям. Файл должен иметь объем необходимого swap-пространства. Это можно сделать несколькими способами. Рассмотрим наиболее быстрый способ – это команда fallocate, которая мгновенно создает файл заранее выделенного размера. Итак, чтобы создать файл в 4 гигабайта, наберите: sudo fallocate -l 4G /swapfile Введите пароль текущего пользователя, чтобы получить доступ к привилегиям sudo, после чего практически сразу же будет создан нужный файл. Чтобы убедиться, что для данного файла выделено необходимое количество пространства, используйте: ls -lh /swapfile -rw-r--r-- 1 root root 4.0G Oct 30 11:00 /swapfile Как видите, все было выполнено должным образом.

Активация своп-файла

Теперь файл создан и готов к работе, но система не знает, что его нужно использовать как swap-пространство. Нужно отформатировать этот файл, а затем активировать его. Для начала необходимо изменить права на файл, запретив доступ к нему всем пользователям, кроме root. Swap-файл с правами на чтение и изменение другими пользователями является серьезной уязвимостью для безопасности сервера. Чтобы передать все привилегии пользователю root, используйте chmod: sudo chmod 600 /swapfile Данная команда передаст root-пользователю исключительные права на чтение и изменение файла. Чтобы убедиться, что привилегии установлены верно, запустив команду ls –lh: ls -lh /swapfile -rw------- 1 root root 4.0G Oct 30 11:00 /swapfile Теперь файл защищен и готов к работе в качестве swap-пространства; укажите системе на данный файл с помощью команды: sudo swapon /swapfile Чтобы убедиться, что процедура прошла успешно, проверьте отчеты системы о swap (как в начале статьи): swapon -s Filename                Type        Size    Used    Priority /swapfile               file        4194300 0     -1 Этот результат подтверждает, что новый своп-файл работает должным образом. Чтоб подтвердить результат, используйте также утилиту free: free -m total       used       free     shared    buffers     cached Mem:          3953        315       3637          8         11        107 -/+ buffers/cache:        196       3756 Swap:         4095          0       4095 Готово! Своп-файл успешно добавлен; теперь операционная система может использовать его в случае необходимости.

Автоматизация запуска swap-файла

Своп-файл активирован, но при перезапуске сервера его придется запускать вручную. Чтобы сервер запускал его автоматически, отредактируйте файл fstab (который управляет файловыми системами и разделами) с привилегиями root, открыв его в текстовом редакторе: sudo nano /etc/fstab В конец файла нужно внести строку, которая будет автоматически запускать созданный своп-файл: /swapfile   swap    swap    sw  0   0 Добавив эту строку, сохраните и закройте файл. Сервер будет читать его при каждой загрузке и запускать swap автоматически.

Тонкая настройка swap (дополнительно)

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

Параметр Swappiness

Параметр swappiness определяет, как часто система может отправлять данные из оперативной памяти в своп. Значение swappiness выражается числом от 0 до 100 (это использованная ОП в процентах; достижение этого значения приведет к использованию своп-пространства). Если значение swappiness близко к нулю, ядро не будет передавать данные в swap без крайней необходимости. Помните, взаимодействие со swap-файлом «дорого обходится» серверу, поскольку требует больше ресурсов, чем взаимодействие с оперативной памятью, что может привести к существенному снижению производительности. Система, как правило, работает продуктивнее, если не слишком часто обращается к swap. Если значение swappiness ближе к 100, система будет передавать в swap огромное количество данных с целью сохранить больше свободного места в RAM. В некоторых случаях этот вариант может быть лучше (это зависит от профиля памяти приложения и цели использования сервера). Чтобы узнать текущее значение swappiness, обратитесь к конфигурационному файлу swappiness: cat /proc/sys/vm/swappiness 30 Стандартное значение swappiness в CentOS 7 – 30, что в большинстве случаев достаточно неплохо. Но для VPS лучше установить более близкое к 0 значение. Чтобы изменить значение swappiness, используйте команду sysctl. К примеру, чтобы задать swappiness значение 10, введите: sudo sysctl vm.swappiness=10 vm.swappiness = 10 Данное значение будет действительным до следующей перезагрузки. Чтобы значение сохранялось и после перезагрузки сервера, откройте файл sysctl: sudo nano /etc/sysctl.conf и внесите в него нужное значение: vm.swappiness = 10 Затем сохраните и закройте файл. Теперь сервер будет автоматически устанавливать нужное значение параметра swappiness при каждой перезагрузке.

Параметр cache_pressure

Еще один важный параметр – vfs_cache_pressure; он управляет хранением записей специальных метаданных файловой системы. Постоянно чтение и обновление этой информации, как правило, требует большого количества ресурсов, поэтому хранить ее в кэше очень полезно для производительности системы. Текущее значение этого параметра можно узнать, запросив файловую систему proc: cat /proc/sys/vm/vfs_cache_pressure 100. Согласно текущим настройкам, система удаляет иноды из кэша слишком быстро. Установив меньшее значение при помощи команды sysctl (например, 50), система будет хранить информацию дольше: sudo sysctl vm.vfs_cache_pressure=50 vm.vfs_cache_pressure = 50 Опять же, это значение действительно только для текущей сессии. Чтобы сделать его постоянным, нужно (как и в случае со swappiness) открыть конфигурационный файл sysctl в текстовом редакторе: sudo nano /etc/sysctl.conf и внести в конец файла строку: vm.vfs_cache_pressure = 50 Сохраните и закройте sysctl. Теперь сервер будет автоматически устанавливать необходимое значение данного параметра при каждой загрузке.

Заключение

Данное руководство поможет научиться рационально использовать оперативную память. Кроме того, оно знакомит с основами использования swap-пространства, что может предотвратить некоторые общие проблемы. Столкнувшись с ошибкой «out of memory» или  обнаружив, что система не может запустить нужные приложения, попробуйте оптимизировать настройки приложений или обновить сервер. Настройка своп-файла, однако, дает большую гибкость и позволяет сэкономить время при работе с менее мощным сервером.

Tags: , , , , , , ,

5 комментариев

Добавить комментарий