Как добавить swap в Debian 8

Добавление swap (пространства подкачки) – один из самых простых способов увеличить активность сервера и предотвратить ошибки out of memory. Данный мануал поможет создать и включить swap-пространство на сервере Debian 8.

Внимание! Пространство swap рекомендуется добавлять в системах, использующих традиционные жесткие диски; использование swap в системах на SSD со временем может вызвать проблемы и даже привести к порче оборудования. В связи с этим крайне не рекомендуется включать swap на серверах провайдеров, использующих SSD-хранилища – лучше увеличить свой сервер.

Что такое swap?

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

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

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

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

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

sudo swapon --show

Если команда не вернула никакого результата, в текущей системе нет swap.

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

free -h
total       used       free     shared    buffers     cached
Mem:          1.0G       331M       668M       4.3M        11M       276M
-/+ buffers/cache:        44M       955M
Swap:           0B         0B         0B

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

2: Проверка свободного пространства на жёстком диске

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

df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda1        25G  946M   23G   4% /
udev             10M     0   10M   0% /dev
tmpfs           201M  4.3M  196M   3% /run
tmpfs           501M     0  501M   0% /dev/shm
tmpfs           5.0M     0  5.0M   0% /run/lock
tmpfs           501M     0  501M   0% /sys/fs/cgroup
tmpfs           101M     0  101M   0% /run/user/1001

В данном случае диск – это устройство / в столбце Mounted on; как видите, места на нём достаточно (использовано всего 946M).

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

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

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

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

Создание swap-файла с помощью dd

Обычно такой файл заранее выделенного размера создаёт команда dd. Это традиционный метод.

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

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

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

.  sudo dd if=/dev/zero of=/swapfile bs=1M count=1024
1024+0 records in
1024+0 records out
1073741824 bytes (1.1 GB) copied, 1.36622 s, 786 MB/s

Проверьте свою команду, прежде чем нажимать клавишу Enter, потому что она может уничтожить данные, если вы укажете неправильное расположение of (output file).

Чтобы убедиться, что у вас получилось выделить 1 Гб, введите:

ls -lh /swapfile
-rw-r--r-- 1 root root 1.0G May 30 15:07 /swapfile

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

Если вы хотите создать файл быстрее, удалите свой swapfile с помощью команды:

sudo rm /swapfile

А затем выполните следующий раздел.

Создание swap-файла с помощью fallocate

Есть более быстрый способ получить тот же файл – это программа fallocate. Обратите внимание, эта команда работает только с более современными файловыми системами, поэтому, если вы, например, используете систему ext3, эта опция будет недоступна.

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

Поскольку в данном случае используется сервер с 1 Гб RAM, мы создадим 1 Гб swap-пространства.

sudo fallocate -l 1G /swapfile

Чтобы проверить выделенный объём памяти, введите:

ls -lh /swapfile
-rw-r--r-- 1 root root 1.0G May 30 15:07 /swapfile

Как видите, команда создала файл с указанным объёмом памяти.

4: Включение swap-пространства

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

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

sudo chmod 600 /swapfile

Проверьте права на файл:

ls -lh /swapfile
-rw------- 1 root root 1.0G May 29 17:34 /swapfile

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

sudo mkswap /swapfile
Setting up swapspace version 1, size = 1048572 KiB
no label, UUID=757ee0b7-db04-46bd-aafb-adf6954ea077

Чтобы включить swap-пространство, введите:

sudo swapon /swapfile

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

sudo swapon --show
NAME      TYPE  SIZE USED PRIO
/swapfile file 1024M   0B   -1

Также можно использовать утилиту free:

free -h
total       used       free     shared    buffers     cached
Mem:          1.0G       925M        74M       4.3M        13M       848M
-/+ buffers/cache:        63M       936M
Swap:         1.0G         0B       1.0G

Теперь система знает о включенном swap-пространстве.

5: Автозагрузка swap

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

sudo cp /etc/fstab /etc/fstab.bak

Добавьте в конец файла данные о swap.

echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab

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

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

Параметр swappiness

Опция swappiness задает частоту использования swap-пространства системой. Значение swappiness выражается числом от 0 до 100 и измеряется в процентах.

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

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

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

cat /proc/sys/vm/swappiness
60

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

Команда sysctl позволяет менять swappiness.

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

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

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

sudo nano /etc/sysctl.conf

Добавьте в конец файла:

vm.swappiness=10

Сохраните и закройте файл.

Параметр vfs_cache_pressure

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

Tags: , , ,