Своп (англ. 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» или обнаружив, что система не может запустить нужные приложения, попробуйте оптимизировать настройки приложений или обновить сервер. Настройка своп-файла, однако, дает большую гибкость и позволяет сэкономить время при работе с менее мощным сервером.