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

Как добавить своп в Ubuntu 14.04


Введение

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

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

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

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

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

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

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

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

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

sudo swapon -s
Filename				Type		Size	Used	Priority

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

Другой, более знакомый способ проверки пространства подкачки — утилита free, которая показывает использование системной памяти. Мы можем увидеть нашу текущую память и использование подкачки в мегабайтах, набрав:

<пред>

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

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

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

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

<пред>

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

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

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

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

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

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

Традиционный медленный путь

Традиционно мы создаем файл с предварительно выделенным пространством с помощью команды dd. Эта универсальная дисковая утилита записывает из одного места в другое.

Мы можем использовать это для записи нулей в файл со специального устройства в системах Linux, расположенного по адресу /dev/zero, которое просто выдает столько нулей, сколько запрошено.

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

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

sudo dd if=/dev/zero of=/swapfile bs=1G count=4
4+0 records in
4+0 records out
4294967296 bytes (4.3 GB) copied, 18.6227 s, 231 MB/s

Проверьте свою команду, прежде чем нажимать ENTER, потому что это может привести к уничтожению данных, если вы укажете of (что означает выходной файл) в неправильное место.

Мы можем увидеть, что выделено 4 гигабайта, набрав:

<пред>

Если вы выполнили приведенную выше команду, вы можете заметить, что это заняло довольно много времени. Фактически, вы можете видеть в выводе, что моей системе потребовалось 18 секунд для создания файла. Это потому, что он должен записать на диск 4 гигабайта нулей.

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

sudo rm /swapfile

Более быстрый способ

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

Мы можем создать файл размером 4 гигабайта, набрав:

sudo fallocate -l 4G /swapfile

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

<пред>

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

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

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

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

sudo chmod 600 /swapfile

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

<пред>

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

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

sudo mkswap /swapfile
Setting up swapspace version 1, size = 4194300 KiB
no label, UUID=e2f1e9cf-c0a9-4ed4-b8ab-714b8a7d6944

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

sudo swapon /swapfile

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

<пред>

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

<пред>

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

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

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

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

sudo nano /etc/fstab

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

/swapfile   none    swap    sw    0   0

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

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

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

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

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

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

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

cat /proc/sys/vm/swappiness
60

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

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

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

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

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

sudo nano /etc/sysctl.conf

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

vm.swappiness=10

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

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

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

cat /proc/sys/vm/vfs_cache_pressure
100

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

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

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

sudo nano /etc/sysctl.conf

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

vm.vfs_cache_pressure = 50

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

Заключение

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

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

Джастин Эллингвуд