Как добавить Swap-файл на облачный сервер Arch Linux

Вступление

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

Как работает swap?

Ядро Linux хранит информацию в участках оперативной памяти, которые называются страницами. Одна программа может занимать огромное количество таких страниц, а значит – много места в RAM. Если новому процессу необходим доступ к физической памяти, создаются новые страницы. Но что если в оперативной памяти не осталось места для новых страниц?

Если программа не использует все страницы, выделенные ей в оперативной памяти, они могут быть удалены, после чего пространство перераспределяется. Это происходит потому, что файлы этих страниц при необходимости можно легко восстановить. Например, если программе А было выделено 10 страниц, но она занимает только 7 из них, то 3 страницы могут быть временно удалены и восстановлены тогда, когда они действительно необходимы. Тем временем пространство, занятое этими тремя страницами, может быть использовано другими программами.

Итак, какое же отношение имеет ко всему этому swap?

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

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

Проверка swap-пространства

Для выполнения действий, описанных в данном руководстве, необходимо войти в систему как root.

su

Прежде чем создать swap-файл, нужно проверить, активировано ли в данной системе swap-пространство. Существует несколько простых способов сделать это. Для начала можно использовать команду «swapon»:

swapon -s
swapon: stat failed -s: No such file or directory

Как можно видеть, на данном сервере Arch Linux эта команда не вывела никакого результата. Команда выполнена верно, просто она не обнаружила swap-пространства.

Другой способ проверки swap-пространства выведет более наглядный результат.

free -m
total       used       free     shared    buffers     cached
Mem:           494         60        434          0          6         28
-/+ buffers/cache:         25        469
Swap:            0          0          0

Как и ожидалось, в итоговом столбце swap равен 0. Это подтверждает результат команды «swapon».

Проверка файловой системы

Существует множество различных мнений по поводу идеального размера swap-области. Чаще всего считается достаточным повторить или удвоить объем имеющейся оперативной памяти (в случае если оперативная память имеет действительно очень большой объем, можно выделить меньшее swap-пространство). В конце концов, все сводится к личным предпочтениям и решение, как правило, зависит от объема доступной оперативной памяти и места на жестком диске.

Данное руководство располагает 512MB ОП и 20GB жёсткого диска. В данном случае удваивать swap-пространство не рекомендуется, так как это займет значительную часть жесткого диска. Лучше повторить объем имеющейся оперативной памяти, то есть, создать 512MB swap-пространства.

Прежде чем создать swap-пространство, нужно убедиться, что на жестком диске достаточно свободного места. Это можно сделать при помощи команды «df».

df -h
Filesystem      Size  Used Avail Use% Mounted on
/dev/vda         20G  965M   18G   6% /
dev             240M     0  240M   0% /dev
run             248M  212K  248M   1% /run
tmpfs           248M     0  248M   0% /dev/shm
tmpfs           248M     0  248M   0% /sys/fs/cgroup
tmpfs           248M     0  248M   0% /tmp

В первой строке указано, что из 20GB жесткого диска доступно приблизительно 18GB. Этого места более чем достаточно для создания 512MB swap-пространства.

Создание и активация Swap-файла

Теперь все готово для создания swap-пространства. Руководство рассматривает два разных способа сделать это. Во-первых, можно использовать команду «dd».

dd if=/dev/zero of=/swapfile bs=1M count=512
512+0 records in
512+0 records out
536870912 bytes (537 MB) copied, 1.96268 s, 274 MB/s

Теперь нужно подтвердить, что файл создан верно.

ls -lh /swapfile
-rw-r--r-- 1 root root 512M Jun 28 18:41 /swapfile

Как можно видеть, теперь на сервере есть файл размером в 512MB под названием /swapfile. Теперь попробуйте создать swap-файл другим способом. Для начала нужно удалить только что созданный swap-файл.

rm /swapfile

Программа «fallocate» создает swap-файлы быстрее, чем «dd». Кроме того, ее синтаксис намного легче запомнить.

fallocate -l 512M /swapfile

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

ls -lh /swapfile
-rw-r--r-- 1 root root 512M Jun 28 18:54 /swapfile

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

free -m
total       used       free     shared    buffers     cached
Mem:           494         41        453          0          1         13
-/+ buffers/cache:         25        468
Swap:            0          0          0

Пока что это обычный файл. Хотя он и называется «swapfile», Linux еще не знает, что его нужно использовать как swap. Теперь его нужно отформатировать и активировать.

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

chmod 600 /swapfile

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

ls -lh /swapfile
-rw------- 1 root root 512M Jun 28 18:54 /swapfile

Теперь, когда файл защищен, его можно форматировать.

mkswap /swapfile
Setting up swapspace version 1, size = 524284 KiB
no label, UUID=61f42c98-d1ef-4f27-84c2-713c5f63d434

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

swapon /swapfile

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

free -m
total       used       free     shared    buffers     cached
Mem:           494         42        452          0          1         14
-/+ buffers/cache:         25        468
Swap:          511          0        511

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

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

nano /etc/fstab
# Paste this information at the bottom of the file
/swapfile      none    swap    defaults       0       0

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

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

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

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

cat /proc/sys/vm/swappiness
60

Значение 60 установлено по умолчанию и отлично подходит для VPS. К примеру, значение swappiness для рабочего стола лучше приблизить к 0. Чтобы протестировать разные значения swappiness, используйте «sysctl»:

sysctl vm.swappiness=10
vm.swappiness = 10

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

cat /proc/sys/vm/swappiness
10

Чтобы сделать это значение значением по умолчанию, нужно отредактировать файл «/etc/sysctl.conf».

nano /etc/sysctl.conf
# Search for the vm.swappiness setting.  Uncomment and change it as necessary.
vm.swappiness=10

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

Еще один параметр, который нужно подогнать, называется «vm.vfs_cache_pressure». Отредактировав значение «cache pressure», можно изменить предпочтение системы хранить кэш-информацию «inode» и «dentry» по сравнению с другими видами информации. Это значит, что ОС будет дольше хранить информацию о той файловой системе, которая потребляет много ресурсов при просмотре и часто запрашивается. Это, как правило, приводит к росту производительности.

Текущее значение можно увидеть в каталоге /proc.

cat /proc/sys/vm/vfs_cache_pressure
100

Текущее значение выводит информацию «inode» из кэша быстрее, чем нужно. Значение «cache pressure» 50 будет в данном случае намного лучше. Данное значение можно установить таким же образом, что и swappiness.

sysctl vm.vfs_cache_pressure=50
vm.vfs_cache_pressure = 50

Опять же, чтобы данное значение оставалось действительным даже после перезагрузки, внесите его в файл «/etc/sysctl.conf».

nano /etc/sysctl.conf
# Search for the vm.vfs_cache_pressure setting.  Uncomment and change it as necessary.
vm.vfs_cache_pressure = 50

Это делает значение «cache pressure» постоянным.

Tags: , , ,

Добавить комментарий