Оперативная память имеет очень важное значение для нормальной работы сервера. В ней размещаются все программы и их данные, когда память переполняется, программы могут выдавать различные ошибки или даже прекращать работу. Время отклика системы увеличивается настолько, что работать с ней становиться невозможным.
Самый простой способ увеличить количество оперативной памяти и защитить систему от переполнение памяти, это добавить раздел swap ubuntu. В этой статье будет рассмотрено как выполняется настройка swap Ubuntu. Мы рассмотрим вариант с добавлением раздела подкачки для обычных компьютеров, а также файла подкачки для серверов.
Содержание статьи:
Обратите внимание
Хотя использование раздела подкачки на жестком диске HDD это привычное явление, применение такого метода для SSD может вызвать проблемы. SSD имеет ограниченное количество перезаписей одного сектора, а область swap постоянно перезаписывается, это очень сильно снизит срок службы вашего диска. Поэтому использование swap пространства на SSD строго не рекомендуется.
Что такое Swap?
Swap - это пространство подкачки это область на жестком диске, которая используется для временного хранения данных из оперативной памяти, для которых там больше нет места. Это позволяет увеличить объем информации, которую система может хранить в рабочей памяти. Пространство подкачки используется только тогда, когда память уже полностью занята, и туда будут помещаться только данные, которые давно использовались.
Работа с информацией будет выполняться намного медленнее, чем в оперативной памяти, но операционная система будет продолжать работать и использовать swap только для старых данных. В целом, это может быть отличной защитой от переполнения оперативной памяти. Пространство подкачки можно настроить двумя способами, добавив раздел подкачки ubuntu на диске или создать файл подкачки.
Проверка Swap
Перед тем как перейти к настройке давайте посмотрим не подключены ли другие разделы подкачки к системе. Для этого выполните:
sudo swapon --show
Если ничего не будет выведено, значит в вашей системе swap ubuntu не настроен. Вы также можете убедиться, что нет активного swap с помощью утилиты free:
free -h
Строка Swap пуста, значит раздела swap пока еще не подключен.
Настройка файла подкачки в Ubuntu 16.04
На серверах часто используется файл подкачки, такой способ применяется потому что не всегда есть возможность менять разметку диска.
Проверка места на диске
Теперь убедитесь, что на диске есть достаточно свободного места. Самый простой способ узнать свободное место в терминале - это утилита df:
df -h
В нашем случае есть достаточно места для размещения пространства подкачки. Размер swap Ubuntu 16.04 зависит от ваших потребностей. Обычно рекомендуют использовать объем в два раза больше чем реальный размер оперативной памяти. Но больше 4 Гб использовать не нужно. Если вы планируете использовать гибернацию на персональном компьютере, то нужно использовать объем, равный объему ОЗУ.
Создание файла подкачки в Ubuntu 16.04
Самый быстрый способ создать swap файл ubuntu такой файл, это использовать утилиту fallocate, она создает файл нужного размера мгновенно. Поскольку у нас 1 Гб оперативной памяти, добавим раздел подкачки ubuntu на 2 Гб. Для этого выполните:
sudo fallocate -l 1G /swapfile
Посмотрите, действительно ли зарезервировано нужное количество памяти:
ls -lh /swapfile
Активация swap
Когда файл готов, нам нужно превратить его в файл swap Ubuntu. Сначала нужно заблокировать доступ к нему всем кроме суперпользователя. Для этого выполните:
sudo chmod 600 /swapfile
Теперь только root может читать и изменить этот файл:
ls -lh /swapfile
Затем создайте файловую систему swap командой:
sudo mkswap /swapfile
Когда файл будет размещен и промаркирован вы можете включить файл подкачки чтобы начать его использовать:
sudo swapon /swapfile
Вы можете убедиться что все работает с помощью команды:
sudo swapon --show
И еще раз смотрим вывод утилиты free:
free -h
Как видите, файл подкачки был успешно создан и активирован. Теперь памяти намного больше и система не зависнет. Но он будет работать только до перезагрузки.
Постоянный файл подкачки
Как я уже сказал, этот swap ubuntu будет работать только до перезагрузки сервера или компьютера. Чтобы настройка Swap в Ubuntu сохранялась после перезагрузки нужно отредактировать файл /etc/fstab. Вы можете вручную добавить строку в файл, но вы можете использовать такую команду:
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
Настройка раздела подкачки в Ubuntu
Я не буду писать много про то, как выполняется настройка swap в Ubuntu в виде раздела. Все действия аналогичны тем, которые применяются для файла, только вместо файла используется раздел. Допустим, мы хотим использовать раздел /dev/sda2. Сначала создать swap Ubuntu из обычного раздела:
sudo mkswap /dev/sda2
Затем активируйте раздел подкачки:
sudo swapon /dev/sda2
И проверьте все ли прошло правильно:
sudo swapon --show
Если да, то в списке подключенных разделов вы увидите нужный. Осталось добавить строку в /etc/fstab для автоматической активации после перезагрузки:
echo '/dev/sda2 none swap sw 0 0' | sudo tee -a /etc/fstab
Дополнительные настройки
Вы можете контролировать интенсивность использования пространства подкачки в Ubuntu с помощью параметра ядра swappiness:
cat /proc/sys/vm/swappiness
По умолчанию установлено значение 60. Если это значение ближе к 100, система будет пытаться поместить в подкачку больше данных и сберечь память, при значениях близких к нулю, ядро не переносит данные на диск, если в этом нет крайней необходимости. Этот вариант может сделать систему быстрее, особенно актуально для домашних компьютеров.
Чтобы установить значение 10 выполните:
sudo sysctl vm.swappiness=10
А для сохранения этой настройки после перезагрузки:
sudo sysctl -w vm.swappiness=10
Другой параметр, который влияет на количество используемой памяти - это vfs_cache_pressure. Он указывает системе какое время нужно хранить открытые файлы в кэше оперативной памяти. Значение 100 заставляет систему удалять такие файлы очень быстро, 0 - держать их в памяти как можно дольше. Посмотрите текущее состояние:
cat /proc/sys/vm/vfs_cache_pressure
Чтобы хранить файлы дольше, можно установить значение в 50:
sudo sysctl -w vm.vfs_cache_pressure=50
Выводы
С помощью этой инструкции вы можете на время решить проблему с пространством подкачки если серверу недостаточно памяти, или поможет предотвратить компьютер от зависания. Настройка swap в Ubuntu выполняется очень просто. Если у вас остались вопросы, спрашивайте в комментариях!
Всегда использовал раздел подкачки, но после прочтения статьи возник вопрос, если создать постоянный файл подкачки, то можно будет с этим файлом ипользовать гибернацию или нужны дополнительные настройки?
Можно.
swapon: /swapfile: не удалось выполнить swapon: Недопустимый аргумент
swapon без двоеточия
Такое случается если раздел или файл отформатирован не правильно или там находится что-то лишнее.
ADMIN:
А что-ж Вы не упомянули про параметр --priority влияющей на паритет обращения к разделу и файлу swap ??
Если партишн, на котором создается файл отформатирован в btrfs - то свап, созданный таким образом, работать не будет.
А тот своп раздел что мы создаем при установке он что не рабочий получается?
Рабочий, только не все создают раздел подкачки при установке.
а что лучше файл или раздел?
Раздел в определенной степени быстрее, так как не зависит от файловой системы, но этого заметно не будет. Файл гибче, поскольку вы всегда можете изменить размер.
А подскажи пожалуйста, как изменить размер swap-файла? У меня Ubuntu 17.04 x64. Просто работаю с тяжелыми программами и они всю память сжирают за считанные минуты, поэтому есть необходимость не много увеличить swap-файл.
Файл гибче, поскольку вы всегда можете изменить размер. Как изменить размер swap-файла? Ubuntu 16.04 x64.
Изменить размер swap-файла: https://google.gik-team.com/?q=%D0%9A%D0%B0%D0%BA+%D0%B8%D0%B7%D0%BC%D0%B5%D0%BD%D0%B8%D1%82%D1%8C+%D1%80%D0%B0%D0%B7%D0%BC%D0%B5%D1%80+swap-%D1%84%D0%B0%D0%B9%D0%BB%D0%B0%3F+Ubuntu+16.04+x64
А если вкратце:
1. swapoff -a
2. изменить размер swap-файла
3. swapon -a
При условии, что swap-файл прописан в /etc/fstab и запускается только оттуда. А вообще - в zRAM надо сначала всё пихать, а уж потом на диск swap'иться...
Ну как сказать технология так называемой виртуальной памяти (которая кстати и в Windows NT используется) не заменит по быстродействию
настоящий RAМ . Тут ещё подбирать нужно кооф. swap т.к для тяжёлых приложений он нужен больше для сервера вообще отдельная песня.
ADMIN: В большинстве дистрибутивов установщик Аnaconda не начнёт установку или разметку HDD пока Вы не создадите swap раздел.
и я считаю это правильно чем позднее после установки уменьшать разделы на уже работающей системе . (:imho)
OS: Mint Linux 18 Cinnamon
Данная команда не сохраняет параметр после перезагрузки!
$ sudo sysctl -w vm.swappiness=10
Помогает только добавление параметра в файл /etc/sysctl.conf
Так это естесственно, ведь sysctl -w всего лишь записывает параметр на любом Линукс, а чтоб он оставался после перезагрузки, надо править файл /etc/sysctl.conf или писать команду в скрипт автозапуска, но, чтоб он запускался позже.
Почитал статью, подумал подумал и решил отказаться от свап-раздела в угоду zram. Весь SSD отдал под корень с хомяком с ФС btrfs, затем sudo apt install zram-config и усё..
Вы советуете изменить значение интенсивности использования пространства подкачки с 60 на 10,
(этот вариант может сделать систему быстрее),
и параметр в vfs_cache_pressure со 100 на 50. Но не рассказали что дает изменение со 100 на 50.
Ответьте пожалуйста.
Вопрос интересный. Везде рекомендуют это значение наоборот увеличить если ОЗУ больше 2ГБ, но тут 1 ГБ. Вот типичное описание:
"В псевдофайле vfs_cache_pressure хранится значение - уровень выделяемой памяти под кэш. Значение по умолчанию: 100. Увеличение этого параметра заставляет ядро активнее выгружать неиспользуемые страницы памяти из кеша, т.е. количество выделяемой оперативной памяти под кеш будет расти медленнее, что в свою очередь снизит вероятность того, что будет задействован раздел swap. При уменьшении этого параметра ядро, наоборот, будет дольше держать страницы памяти в кеше, в том числе и в swap'е. Это имеет смысл при небольшом количестве ОЗУ, например, если у нас 512 МБ памяти, то параметр vfs_cache_pressure можно выставить равным 50. Это позволит сократить количество дисковых операций в swap разделе, так удаление неиспользуемых страниц будет происходить реже. Дальнейшее уменьшение этого параметра может привести к нехватке памяти.
Если вы хотите ускорить работу системы и у вас достаточно оперативки (2 Гб и более), то измените значение системы, так: swappiness = 10 , vfs_cache_pressure = 1000 (по умолчанию 100)"
"изменить значение интенсивности использования пространства подкачки с 60 на 10" - этот вариант сделает систему быстрее ровно до того момента, пока не начнётся использоваться SWAP...поэтому этот параметр надо подбирать индивидуально. При наличии SWAP на HDD и ОЗУ меньше 4 ГБ - я бы не советовал выставлять vm.swappiness=10 при использовании ресурсоёмких приложений, например, более 40-а открытых вкладок в Firefox, т.к. в момент начала SWAP'а, при остатке 10% свободного места в ОЗУ, начнётся валовая скидка инфы из ОЗУ в SWAP - тормоза, да и только....Штатный vm.swappiness=60 растягивает скидку инфы в SWAP, что относительно выравнивает быстродействие ПК в целом за счёт замедления в начале.
Более выгодным оказывается вариант использования SWAP в zRAM.
Вот примерно подобрано (ресурсоёмкие приложения используются редко):
HDD, RAM 1-2GB - zRAM=40% от RAM, SWAP=200% от RAM, vm.swappiness=50 (SWAP используется редко, особенно на 2GB ОЗУ; вовсю используется SWAP в zRAM)
SSD, RAM 8GB - zRAM=25% от RAM, SWAP=100% от RAM, vm.swappines=30 (SWAP на жёсткий не используется вообще, кроме включения hybernate, для него и оставлен; SWAP в zRAM используется очень редко)
Что касаемо изменения vm.vfs_cache_pressure, то это имеет смысл при маленьком размере ОЗУ, так, например, при 1ГБ ОЗУ - вполне уместно выставить vm.vfs_cache_pressure=50, что слегка ускоряет систему; на 2 ГБ ОЗУ - спорный вопрос, но скорее да, чем нет. При ОЗУ более 4ГБ - смысл менять этот параметр не вижу. Выставлять vm.vfs_cache_pressure более, чем 200, я пробовал - смысла не вижу. А выставление vm.vfs_cache_pressure=1000 - замедляет систему при любом размере ОЗУ, см. оф. описание: https://www.kernel.org/doc/Documentation/sysctl/vm.txt
"Increasing vfs_cache_pressure significantly beyond 100 may have negative performance impact. Reclaim code needs to take various locks to find freeable directory and inode objects. With vfs_cache_pressure=1000, it will look for ten times more freeable objects than there are."
Увеличение vfs_cache_pressure значительно выше 100 может отрицательно сказаться на производительности. Код возврата должен принимать различные блокировки для поиска свободных каталогов и объектов inode. С vfs_cache_pressure = 1000 он будет искать в десять раз больше свободных объектов, чем есть.
Поясните, пожалуйста, такой момент:
Если файловая система на диске btrfs, а эта файловая система (как я понял) не дружит со swap, то будут ли проблемы с созданием файла подкачки?
Файл подкачки можно создать без проблем, к тому же ничего не мешает вынести раздел подкачки на отдельный, не btrfs раздел.
Я в предыдущем своём сообщении совершенно забыл ссылку дать:
https://btrfs.wiki.kernel.org/index.php/FAQ#Does_btrfs_support_swap_files.3F
А о чём тогда это сообщение? О каких проблемах упоминается там?
>>ничего не мешает вынести раздел подкачки на отдельный, не btrfs раздел.
Я почему задаю этот вопрос, потому что убунта 17 решила отказаться от отдельного раздела в пользу файла подкачки. И я пытаюсь разобраться что же делать с btrfs.
А вот он, кстати, и сюрпрайз
https://superuser.com/questions/539287/swapon-failed-invalid-argument-on-a-linux-system-with-btrfs-filesystem
Офигеннай сайт - так держать, я прочитал на нем всего 2е инструкции, но думаю уже добавить его в закладки, т.к. на редкость эти мануалы работают...
Всё замечательно получилось вот только как всё вернуть как было не знаю, я не шарю пока в ubuntu подскажите.
user@...:~$ sudo swapon --show
NAME TYPE SIZE USED PRIO
/swapfile file 2G 0B -1
/dev/sda5 partition 2G 0B -2
user@...:~$ free -h
total used free shared buff/cache available
Память: 1,9G 748M 327M 211M 867M 759M
Подкачка: 3,9G 0B 3,9G
Не нравится мне то что я натворил 🙁
Ну вроде правильно ты размер swap создал, в два раза больше чем свой ОЗУ
Автор просто молодец! Отличная подача материала! Огромное спасибо!!!
А что за тема для Ubuntu или это какой-то не дефолтный терминал?
Вы про это: https://hkar.ru/WjcQ ?
Так то штатный Cinnomon'овский Mint 😉 Просто PS1 сменён под своё удобство, вот, например, отрывок из моего /etc/bash.bashrc, что в моём Mint LMDE 3 находится:
if [[ ${EUID} == 0 ]] ; then
PS1='$(e=$?; (( $e != 0 )) && echo -e "\033[33mError: \033[31;1m$e\n\n")\n\[\033[00;34m\]${debian_chroot:+($debian_chroot)}\[\033[01;31m\]\u\[\033[00m\]@\[\033[01;31m\]\h \[\033[00m\]$(date -u "+%e.%m.%Y %A %T" | sed "s/^ //") \[\033[01;34m\]\w\n\$\[\033[00m\] '
else
PS1='$(e=$?; (( $e != 0 )) && echo -e "\033[33mError: \033[31;1m$e\n\n")\n\[\033[00;34m\]${debian_chroot:+($debian_chroot)}\[\033[01;32m\]\u\[\033[00m\]@\[\033[01;32m\]\h \[\033[00m\]$(date -u "+%e.%m.%Y %A %T" | sed "s/^ //") \[\033[01;34m\]\w\n\$\[\033[00m\] '
fi
Вот ещё скрин с root'ом: https://hostingkartinok.com/show-image.php?id=c57edc5c3c79f0fe381fe4bced00422c
И да: описочка вышла - cinnamon 🙂
На панели сверху снизу внимания не обращайте - на Satellite L635 экранчик всего 13.4 дюйма....не помещается всё внизу - слишком мелко и нечитабельно, когда по 20 вкладок открыто, вот и вынес наверх половину, т.к. сбоку мне не удобно.
Добрый день. Возникает такая проблема.
root@viktor:~# sudo fallocate -l 2G /swapfile
root@viktor:~# sudo chmod 600 /swapfile
root@viktor:~# sudo mkswap /swapfile
mkswap: /swapfile: warning: wiping old swap signature.
Setting up swapspace version 1, size = 2 GiB (2147479552 bytes)
no label, UUID=ec0d16ba-8ce6-4e1e-9902-5dea4ad3ff06
Естесственно, ведь сам файл-то Вы не создали...как-то так:
root@viktor:~# sudo dd if=/dev/zero bs=1024 count=2000000 /swapfile
root@viktor:~# sudo chmod 600 /swapfile
root@viktor:~# sudo mkswap /swapfile
Хотел уточнить, у меня на сервере заведен своп раздел, добавление своп файла увеличит общий объем. Раздел и файл могут работать вместе?
Всё верно. Объем увеличится.
А для сохранения этой настройки после перезагрузки:
sudo sysctl -w vm.swappiness=10
Это как понять? Ничего не сохраняет!
про /etc/sysctl.conf я знаю
В чём может быть ошибка если после создания файла подкачки он не задействуется? 0 байт пишет из 4Гиб