Site icon 8HOST.COM

Как добавить Swap на Ubuntu 14.04

Один из самых простых способов увеличить активность сервера и предотвратить ошибки приложений out of memory – это добавление пространства swap (подкачки). Swap – это раздел на жестком диске, в котором операционная система может временно хранить данные, которые она больше не может удерживать в оперативной памяти.

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

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

Данное руководство охватывает создание и активацию swap-файла на сервере Ubuntu 14.04.

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

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

Чтобы узнать, есть ли активное swap-пространство в текущей системе, наберите:

sudo swapon -s
Filename                Type        Size    Used    Priority

Если (как показано выше) возвращается только заголовок таблицы, в данной системе нет активного swap-пространства.

Еще один, более привычный способ проверки swap-пространства – утилита free, которая показывает использование памяти системы. Чтобы узнать текущее состояние памяти и swap в мегабайтах, наберите:

free -m
total       used       free     shared    buffers     cached
Mem:          3953        154       3799          0          8         83
-/+ buffers/cache:         62       3890
Swap:            0          0          0

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

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

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

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

df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda         59G  1.3G   55G   3% /
none            4.0K     0  4.0K   0% /sys/fs/cgroup
udev            2.0G   12K  2.0G   1% /dev
tmpfs           396M  312K  396M   1% /run
none            5.0M     0  5.0M   0% /run/lock
none            2.0G     0  2.0G   0% /run/shm
none            100M     0  100M   0% /run/user

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

Существует множество расхожих мнений о «правильном» размере swap-пространства. В целом, это зависит от личных предпочтений пользователя и требований приложения. Как правило, swap-пространство должно быть равно или вдвое больше объема оперативной памяти системы.

В этом вопросе нужно ориентироваться на свободное дисковое пространство. Например, если RAM системы – 4 гигабайта, а вдвое большее swap-пространство (т.е., 8 гигабайт) займет существенную часть дискового пространства, нужно создать swap не более 4 гигабайт.

Создание swap-файла

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

В руководстве такой файл называется swapfile и находится в root-каталоге (/). Файл должен иметь объем необходимого swap-пространства. Есть два основных способа создать swap-файл.

Способ 1: традиционный (медленный)

Как правило, для создания файла с заранее выделенным пространством используется команда dd – универсальная утилита, которая записывает данные из одного местоположения в другое.

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

Чтобы указать размер файла, используйте комбинацию bs (block size – размер блока) и count (количество блоков). Значения, которые присваиваются каждому параметру, можно выбрать почти произвольно. Важно лишь то, каким будет результат умножения этих значений.

К примеру, чтобы создать файл размером 4Гб, можно присвоить bs=1G, а count=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 (что расшифровывается как «output file» – выходной файл) задан неверно, она может уничтожить данные другого файла.

Набрав следующую команду, можно увидеть, что 4 гигабайта были выделены:

 ls -lh /swapfile
-rw-r--r-- 1 root root 4.0G Apr 28 17:15 /swapfile

Как видите, выполнение данной команды занимает достаточно много времени. В данном примере на создание файла системе понадобилось 18 секунд. Это потому, что ей нужно было написать 4 гигабайта нулей.

Существует более быстрый способ написания swap-файлов; чтобы попробовать создать файл быстрее, удалите только что созданный файл и исследуйте инструкциям следующего раздела:

sudo rm /swapfile

Способ 2: быстрый

Программа fallocate позволяет создать такой файл быстрее. Данная команда мгновенно создает файл заранее выделенного размера, не имея необходимости писать фиктивное содержимое.

Итак, чтобы создать файл в 4Гб, можно набрать:

sudo fallocate -l 4G /swapfile

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

ls -lh /swapfile
-rw-r--r-- 1 root root 4.0G Apr 28 17:19 /swapfile

Как видите, все было выполнено должным образом.

Активация swap-файла

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

Но прежде необходимо изменить права на файл, чтобы только root имел право на чтение. Swap-файл с правами на чтение и изменение другими пользователями – огромный риск для безопасности сервера. Чтобы передать все привилегии пользователю root, наберите:

sudo chmod 600 /swapfile

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

ls -lh /swapfile
-rw------- 1 root root 4.0G Apr 28 17:19 /swapfile

Как видите, права на чтение и запись есть только у пользователя root.

Теперь, когда файл защищен, можно указать системе на swap-пространство с помощью команды:

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

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

sudo swapon /swapfile

Убедитесь, что процедура прошла успешно, проверив отчеты системы о swap, как в начале статьи:

sudo swapon -s
Filename                Type        Size    Used    Priority
/swapfile               file        4194300 0       -1

Теперь система сообщает об активированном swap-файле. Можно также использовать и утилиту free, чтоб подтвердить результат:

free -m
total       used       free     shared    buffers     cached
Mem:          3953        101       3851          0          5         30
-/+ buffers/cache:         66       3887
Swap:         4095          0       4095

Как видите, swap-пространство было добавлено успешно; теперь операционная система может использовать его в случае необходимости.

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

Итак, теперь файл подкачки активирован, но при перезапуске сервер не будет запускать его автоматически. Чтобы изменить это, отредактируйте файл fstab с привилегиями root, открыв его в текстовом редакторе:

sudo nano /etc/fstab

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

/swapfile   none    swap    sw    0   0

Сохраните изменения и закройте fstab.

Тонкая настройка swap

Существует несколько опций, которые могут влиять на производительность системы при работе swap.

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

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

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

cat /proc/sys/vm/swappiness
60

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

Чтобы изменить значение swappiness, используйте команду sysctl.

К примеру, чтобы установить значение 10, нужно набрать:

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

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

sudo nano /etc/sysctl.conf

и внесите в него следующую строку:

vm.swappiness=10

Затем сохраните и закройте файл.

Еще одна важная опция – это vfs_cache_pressure. Этот параметр  управляет склонностью ядра восстанавливать память, которая используется для кэширования каталогов и инодов объектов.

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

cat /proc/sys/vm/vfs_cache_pressure
100

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

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