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

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


Введение

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

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

Без подкачки сервер, которому не хватает памяти, может начать убивать приложения, чтобы освободить память, или даже выйти из строя. Это может привести к потере несохраненных данных или простоям. Чтобы обеспечить надежный доступ к данным, для работы некоторых приложений требуется своп.

В этом руководстве мы расскажем, как создать и включить файл подкачки на сервере CentOS 7.

Хотя подкачка обычно рекомендуется для систем, использующих традиционные вращающиеся жесткие диски, использование подкачки с твердотельными накопителями может со временем вызвать проблемы с аппаратной деградацией. В связи с этим мы не рекомендуем включать своп в DigitalOcean или любом другом провайдере, который использует хранилище SSD. Это может повлиять на надежность базового оборудования для вас и ваших соседей.

Если вам нужно повысить производительность вашего сервера, мы рекомендуем обновить Droplet. Это приведет к лучшим результатам в целом и уменьшит вероятность возникновения проблем с оборудованием, которые могут повлиять на вашу службу.

Предпосылки

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

Вам понадобится сервер CentOS 7, установленный и настроенный пользователем без полномочий root с привилегиями sudo. Если вы еще этого не сделали, вы можете выполнить шаги 1-4 в руководстве по начальной настройке сервера CentOS 7, чтобы создать эту учетную запись.

После того, как у вас есть пользователь без полномочий root, вы можете использовать его для SSH на вашем сервере CentOS и продолжить установку вашего файла подкачки.

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

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

Мы можем увидеть, есть ли в системе какой-либо настроенный своп, используя 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

Как видите, общее пространство подкачки в системе равно 0. Это соответствует тому, что мы видели с swapon.

Проверить доступное место для хранения

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

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

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 просто указывает dh выводить информацию о диске в удобном для чтения формате. Например, вместо того, чтобы выводить необработанное количество блоков памяти в разделе, df -h сообщит нам об использовании и доступности пространства в M (для мегабайт) или G (для гигабайт).

Как видно из первой строки, в нашем разделе хранилища доступно 59 гигабайт, так что у нас достаточно места для работы. Имейте в виду, что это новый экземпляр VPS среднего размера, поэтому ваше фактическое использование может сильно отличаться.

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

Поскольку в моей системе 4 гигабайта памяти, и удвоение этого объема потребует от моего дискового пространства больше, чем я готов расстаться, я создам пространство подкачки размером 4 гигабайта, чтобы соответствовать памяти моей системы.

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

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

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

sudo dd if=/dev/zero of=/swapfile count=4096 bs=1MiB

После ввода пароля для авторизации привилегий sudo будет создан файл подкачки. Это может занять некоторое время, после чего вам вернется подсказка. Мы можем убедиться, что для подкачки зарезервировано правильное количество места, используя ls:

ls -lh /swapfile
-rw-r--r-- 1 root root 4.0G Oct 30 11:00 /swapfile

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

Включить файл подкачки

Прямо сейчас наш файл создан, но наша система не знает, что он должен использоваться для подкачки. Нам нужно указать нашей системе отформатировать этот файл как файл подкачки, а затем включить его.

Прежде чем мы это сделаем, мы должны настроить права доступа к нашему файлу подкачки, чтобы он не был доступен для чтения никому, кроме учетной записи root. Разрешение другим пользователям читать или писать в этот файл было бы огромным риском для безопасности. Мы можем заблокировать разрешения с помощью chmod:

sudo chmod 600 /swapfile

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

ls -lh /swapfile
-rw------- 1 root root 4.0G Oct 30 11:00 /swapfile

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

sudo mkswap /swapfile
Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=b99230bb-21af-47bc-8c37-de41129c39bf

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

sudo swapon /swapfile

Чтобы убедиться, что процедура прошла успешно, мы можем проверить, сообщает ли теперь наша система о пространстве подкачки:

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

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

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

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

Отредактируйте файл с правами sudo в текстовом редакторе:

sudo nano /etc/fstab

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

/swapfile   swap    swap    sw  0   0

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

Настройте параметры обмена (необязательно)

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

обмен

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

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

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

Мы можем увидеть текущее значение swappiness, прочитав файл конфигурации swappiness:

cat /proc/sys/vm/swappiness
30

В CentOS 7 по умолчанию параметр swappiness равен 30, что является справедливой промежуточной точкой для большинства настольных компьютеров и локальных серверов. Для системы VPS мы, вероятно, хотели бы приблизить его к 0.

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

sudo sysctl vm.swappiness=10
vm.swappiness = 10

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

sudo nano /etc/sysctl.conf

Добавьте настройку swappiness в конец файла:

vm.swappiness = 10

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

Давление кеша

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

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

cat /proc/sys/vm/vfs_cache_pressure
100

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

sudo sysctl vm.vfs_cache_pressure=50
vm.vfs_cache_pressure = 50

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

sudo nano /etc/sysctl.conf

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

vm.vfs_cache_pressure = 50

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

Заключение

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

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