Добавить Swap в CentOS/Fedora/RedHat
Иногда, приходит время использовать SWAP из-за того что «заканчивается» оперативная память. Ну или нужно изменить файл подкачки ( увеличить или уменьшить). Т.к данные действия производятся очень редко, то я не держу в голове и мне приходится обращаться за помощью в гугл. Но данная статья «Добавить Swap в CentOS/Fedora/RedHat» будет служить как заметкой на момент использования.
Проверяем наличие SWAP-а в CentOS/Fedora/RedHat
Прежде чем я начну, нужно взглянуть на хранение сервера, чтобы увидеть имеется ли подкачка. Чтобы посмотреть данную информацию, можно выполнить одно из ниже упомянутых утилит.
Через утилиту swapon:
[root@localhost ~]# swapon -s Filename Type Size Used Priority /dev/dm-1 partition 2031612 0 -1 [root@localhost ~]#
Если ничего не возвращается командой, то на сервере нет файла для подкачки. У меня он есть, я ему выделил 2Гб. Но предположим что мне этого мало и я хотел бы увеличить его до 3-4Гб.
Другой способ проверки — это использовать утилиту «free», которая показывает нам общее использование памяти в системе. Мы можем видеть нашу текущую память и использование подкачки (в мегабайтах), введя:
# free -m total used free shared buffers cached Mem: 3953 315 3637 8 11 107 -/+ buffers/cache: 196 3756 Swap: 0 0 4095
Еще один способ — это с утилитой htop/top:
$ htop $ top
Удобный для проверки способ выбирайте сами.
Проверяем дискового пространства и свободного места в CentOS/Fedora/RedHat
Т.к SWAP использует фал созданный на вашем HDD, то необходимо знать сколько имеется свободного места для данной операции. Я обычно использую утилиту — df:
[root@localhost ~]# df -h Filesystem Size Used Avail Use% Mounted on /dev/mapper/vg_servercentos-lv_root 18G 7.3G 9.8G 43% / tmpfs 491M 232K 491M 1% /dev/shm /dev/sda1 477M 150M 302M 34% /boot [root@localhost ~]#
Как я вижу из вывода, место имеется и я смогу выделить 3Гб легко.
Создание файла подкачки (SWAP) в CentOS/Fedora/RedHat
Я приведу 2 способа как можно создать данный файл для подкачки. Я буду хранить свой файл подкачки в папке которую я создам:
# mkdir /home/captain/swap
Вы можете использовать любое другое место.
—- СПОСОБ 1 — Это использование утилиты fallocate.
Самый быстрый и простой способ для создания файла подкачки — использование fallocate. Эта команда создает файл с мгновенным размером. Я выделю себе файл подкачки с 3 Гб, набрав:
# fallocate -l 3G /home/captain/swap/swap.img
Чтобы проверить что вышло, выполните:
[root@localhost ~]# ls -alh /home/captain/swap/swap.img -rw-r--r--. 1 root root 3.0G Feb 12 03:39 /home/captain/swap/swap.img [root@localhost ~]#
Как вы можете видеть, файл подкачки был создан с правильным размером.
—- СПОСОБ 2 — Это использование утилиты dd.
Определите размер нового файла подкачки в мегабайтах (парметр «count») и умножить на 1024, чтобы определить количество блоков. Например, создаем файл подкачки с 1Гб:
# dd if=/dev/zero of=/home/captain/swap/swap.img bs=1024 count=1024000
Так же, можно указать создаваемый блок не в мегабайтах, а в гигабайтах:
[root@localhost swap]# time dd if=/dev/zero of=/home/captain/swap/swap.img bs=2G count=1 dd: writing `/home/captain/swap/swap.img': No space left on device 0+5 records in 0+4 records out 10615627776 bytes (11 GB) copied, 144.066 s, 73.7 MB/s real 2m24.196s user 0m0.000s sys 0m55.893s [root@localhost swap]#
Я использовал утилиту «time» для того чтобы показать на сколько долго это занимает времени.
Включаем/Подключаем Swap в CentOS/Fedora/RedHat
На данный момент, файл создался, но система не знает, что это за файл и как с ним работать. По этому, нужно включить его. Перед тем, как сделать это, мы должны выставить нужные права на файл подкачки так, чтобы он не может быть прочитан кем-либо (кроме пользователя root). Предоставление другим пользователям чтение или запись в этот файл будет огромный риск для безопасности. По этому, выставляем:
# chmod 600 /home/captain/swap/swap.img
Смотрим что вышло:
[root@localhost swap]# ls -alh /home/captain/swap/swap.img -rw-------. 1 root root 3.0G Feb 12 03:57 /home/captain/swap/swap.img [root@localhost swap]#
Теперь, когда наш файл подкачки является более безопасным, можем создать пространство подкачки:
[root@localhost swap]# mkswap /home/captain/swap/swap.img mkswap: /home/captain/swap/swap.img: warning: don't erase bootbits sectors on whole disk. Use -f to force. Setting up swapspace version 1, size = 3145724 KiB no label, UUID=4fc28e9e-8eef-4a01-86a6-67bb522cb707 [root@localhost swap]#
Наш файл подкачки теперь готов к использованию, но нужно еще его включить:
# swapon /home/captain/swap/swap.img
Чтобы убедиться в том, что все выполнено правильно, можем проверить это:
[root@localhost swap]# swapon -s Filename Type Size Used Priority /dev/dm-1 partition 2031612 173936 -1 /home/captain/swap/swap.img file 3145724 0 -2 [root@localhost swap]#
Этот вывод подтверждает, что в системе имеется новый файл подкачки. Вот еще один вывод:
[root@localhost swap]# free -m total used free shared buffers cached Mem: 980 263 717 0 6 49 -/+ buffers/cache: 207 773 Swap: 5055 169 4886 [root@localhost swap]#
С помощью утилиты free, видно что у меня своп уже не 2Гб ( как было ранее), а уже 5Гб. Swap был успешно установлен и ОС начнет использовать его по мере необходимости.
Чтобы выключить его с ОС, используйте:
# swapoff /home/captain/swap/swap.img # swapon -s
Он будет работать до перезагрузки ОС.
Автоматическое монтирование Swap в CentOS/Fedora/RedHat
Файл подкачки включен в данный момент, но когда перезагрузится сервер, то файл подкачки не будет использоваться больше, по этому нужно прописать его в файле FSTAB, который представляет собой таблицу, которая управляет файловыми системами и разделами:
$ sudo vim /etc/fstab
В данном файле, необходимо добавить строку, которая сообщит операционной системе автоматически использовать файл подкачки, который вы создали:
/home/captain/swap/swap.img swap swap sw 0 0
Взаимодействие SWAP с ОС. Проверика и настройка.
Есть несколько вариантов, которые вы можете настроить для более лучшей производительности вашей системы при работе со свопом.
Параметр swappiness определяет, как часто ваша система обменивается данными из оперативной памяти в подкачку. Этот параметр имеет диапазон от 0-100 и представляет собой процент.
При значениях, близких к нулю, ядро не обменяется данными на диск, если это абсолютно необходимо. Помните, что взаимодействие с файлом подкачки являются «дорогими» в том плане, что такие операции занимают гораздо больше времени, чем взаимодействие с оперативной памятью и тем самым могут привести к значительному снижению производительности.
Значения, которые находятся ближе к 100%, ядро будет пытаться поместить больше данных в своп и освободить RAM.
Чтобы проверить текущее значение swappiness, выполните:
# cat /proc/sys/vm/swappiness 60
Т.к я использую виртуальную машину для тестов — установка swappiness в 60 — дает не плохое значение, но для VPS желательно приблизить данный параметр в 0. И чтобы изменить swappiness используйте команду SYSCTL.
Например, чтобы установить swappiness в 10, выполним:
# sysctl vm.swappiness=10 vm.swappiness = 10
Этот параметр не сохранится до следующей перезагрузки и чтобы он применялся при каждом запуски ОС автоматически, нужно изменить (добавив строку в) файл /etc/sysctl.conf:
# vim /etc/sysctl.conf
В самом низу файла, прописываем:
vm.swappiness=10
Сохраняем и закрываем файл.
Другой связанной с этим значением параметр которое вы можете захотеть изменить — vfs_cache_pressure, который настраивает, как много система будет выбирать кэш иноде и dentry по сравнению с другими данными.В основном, это доступ к данным о файловой системе и чтобы посмотреть текущее значение, выполните:
# cat /proc/sys/vm/vfs_cache_pressure 100
Параметр установлен в 100 и тем самым система удаляет информацию инодам из кэша очень быстро. Но если захотите уменьшить, выполните:
# sysctl vm.vfs_cache_pressure=50 vm.vfs_cache_pressure = 50
Это будет работать только до завершения вашей сессии и вы можем изменить его в файле ( как и ранее):
$ sudo vim /etc/sysctl.conf
В самом низу происываем строку, которая определяет ваше новое значение:
vm.vfs_cache_pressure = 50
Как видим, все работает и нет ничего сложного.
Полезная статья:
Увеличить SWAP на Ubuntu/Debian/Mint
Вот и все, тема «Добавить Swap в CentOS/Fedora/RedHat» завершена.
dd: writing `/home/captain/swap/swap.img’: No space left on device
0+5 records in
0+4 records out
10615627776 bytes (11 GB) copied, 144.066 s, 73.7 MB/s
Не моргнул глазом и прям так в статью и запостил.
А если у меня уже есть swap но в виде partition? Можно и нужно увеличивать этот раздел, или создавать дополнительный файл как в вашей статье?