Главная >> Инструкции >> Настройка swap в Ubuntu

Настройка swap в Ubuntu

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

Самый простой способ увеличить количество оперативной памяти и защитить систему от переполнения памяти, это добавить раздел swap в Ubuntu. В этой статье будет рассмотрено как выполняется настройка swap в Ubuntu 20.04. Будет рассмотрен вариант с добавлением swap как на время работы устройства, так и на постоянное использование.


Содержание статьи

Обратите внимание

Хотя использование раздела подкачки на жестком диске HDD это привычное явление, применение такого метода для SSD может вызвать проблемы. SSD имеет ограниченное количество перезаписей одного сектора, а область swap постоянно перезаписывается, это очень сильно снизит срок службы вашего диска. Поэтому использование swap пространства на SSD строго не рекомендуется.

Что такое Swap?

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

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

Проверка Swap

Перед тем как перейти к настройке необходимо проверить не подключены ли разделы подкачки к системе. Для этого необходимо выполнить команду:

swapon --show

Если команда вернет строчку с названием swapfile, это означает что swap в системе уже присутствует:

qJQ2DxsvBYQAAAAASUVORK5CYII=

Если ничего не будет выведено, значит в системе swap не настроен:

A3cY5FQKomDiAAAAAElFTkSuQmCC

Также можно убедиться, что swap активирован или не активирован в системе с помощью утилиты free которая помимо отображения объёма оперативной памяти также отображает информацию об разделе swap:

free -h

Строка со swap отображает значение 2,0 GB. Это означает что swap включен и будет использоваться 2 ГБ жёсткого диска, когда память будет переполнена:

wPh8SYp013UQwAAAABJRU5ErkJggg==

Если значения в разделе swap отображаются по нулям это значит, что раздел swap не подключен:

UBzAeNQ8JV+GsqUS+iVd7P8BIqvvLekDC5MAAAAASUVORK5CYII=

Настройка файла подкачки в Ubuntu 20.04

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

1. Проверка места на диске

Необходимо убедится, что на жёстком диске есть достаточно свободного места. Самый простой способ узнать количество свободного места в терминале – воспользоваться утилитой df:

df -h

+XxBVBSAALDlaAAAAAElFTkSuQmCC

В данном случае есть достаточно места для размещения и увеличения пространства подкачки. Размер swap в Ubuntu 20.04 зависит от потребностей. Обычно рекомендуют использовать объем в два раза больше, чем реальный размер оперативной памяти. Но как правило больше 4 Гб использовать не нужно. Если планируется использовать гибернацию на персональном компьютере, то нужно использовать объем, равный объему ОЗУ.

2. Создание файла подкачки

Самый быстрый способ создать swap файл в Ubuntu 20.04 – это использовать утилиту fallocate, она создает файл нужного размера мгновенно. Поскольку в качестве примера используется машина с 8 Гб оперативной памяти, необходимо добавить раздел подкачки на 3 Гб. Для этого необходимо выполнить команду:

sudo fallocate -l 3G /swapfile

SiSMholxvNzbOT14P8BylQiMlDAoy4AAAAASUVORK5CYII=

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

ls -lh /swapfile

fBG1QUdPg9+33f4fgtonZcmABAAAAAElFTkSuQmCC

Активация swap

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

sudo chmod 600 /swapfile

Теперь только пользователь root может читать и изменить данный файл:

ls -lh /swapfile

8HGmNHSI0QOR0AAAAASUVORK5CYII=

Далее необходимо создать файловую систему swap командой:

sudo mkswap /swapfile

wHzZy75GQ2mTwAAAABJRU5ErkJggg==

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

sudo swapon /swapfile

v9x1DKSlc9uMgAAAABJRU5ErkJggg==

После этого можно убедиться, что swap включен, выполнив команду:

swapon --show

ob4+lbrbVzVelggXPXzf8PzYN09Od4zasAAAAASUVORK5CYII=

Так же наличие swap можно проверить при помощи утилиты free, выполнив команду:

free -h

x+0OpXwVbrkTQAAAABJRU5ErkJggg==

Файл подкачки был успешно создан и активирован. Теперь памяти доступно больше и система не зависнет при нехватке оперативной памяти. Но данный способ будет работать только до перезагрузки устройства.

Постоянный файл подкачки

Как уже было сказано ранее, данный swap будет работать только до перезагрузки сервера или компьютера. Чтобы настройка swap в Ubuntu 20.04 сохранялась после перезагрузки нужно отредактировать файл /etc/fstab. Можно вручную добавить строку в файл, но также можно использовать следующую команду:

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

wUGkEFAhJkf4QAAAABJRU5ErkJggg==

Настройка раздела подкачки в Ubuntu 20.04

Настройка swap в Ubuntu 20.04 в виде раздела аналогична тем же методам, которые применяются для создания swap в виде файла, отличие только в том, что вместо файла используется раздел. Предположим, необходимо использовать раздел /dev/sda2. Сначала необходимо создать swap из обычного раздела:

sudo mkswap /dev/sda2

Далее активировать раздел подкачки:

sudo swapon /dev/sda2

И проверить все ли прошло правильно:

swapon --show

Если да, то в списке подключенных разделов отобразится нужный. Последним шагом остаётся добавить строку в /etc/fstab для автоматической активации после перезагрузки:

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

Дополнительные настройки

Можно контролировать интенсивность использования пространства подкачки в Ubuntu 20.04 с помощью параметра ядра swappiness:

cat /proc/sys/vm/swappiness

wMf6qQE4DRUfgAAAABJRU5ErkJggg==

По умолчанию установлено значение 60. Если это значение ближе к 100, система будет пытаться поместить в подкачку больше данных и сберечь память, при значениях близких к нулю, ядро не переносит данные на диск, если в этом нет крайней необходимости. Этот вариант может сделать систему быстрее, особенно актуально для домашних компьютеров.

Чтобы установить значение 10 необходимо выполнить команду:

sudo sysctl vm.swappiness=10

lP1App8xjPQAAAAASUVORK5CYII=

А для сохранения этой настройки после перезагрузки:

sudo sysctl -w vm.swappiness=10

w879gLuUtXoKgAAAABJRU5ErkJggg==

Другой параметр, который влияет на количество используемой памяти -vfs_cache_pressure. Он указывает системе какое время нужно хранить открытые файлы в кэше оперативной памяти. Значение 100 заставляет систему удалять такие файлы очень быстро, 0 - держать их в памяти как можно дольше. Проверить текущее состояние можно при помощи команды:

cat /proc/sys/vm/vfs_cache_pressure

2IgWfMNN7QwAAAABJRU5ErkJggg==

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

sudo sysctl -w vm.vfs_cache_pressure=50

B7v8POBFbt7CZog4AAAAASUVORK5CYII=

Выводы

С помощью данной инструкции можно на время решить проблему с пространством подкачки если серверу недостаточно памяти, или поможет предотвратить компьютер от зависания. Настройка swap в Ubuntu 20.04 выполняется очень просто. Если у вас остались вопросы, спрашивайте в комментариях!

42 комментария к “Настройка swap в Ubuntu”

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

    Ответить
  2. OS: Mint Linux 18 Cinnamon
    Данная команда не сохраняет параметр после перезагрузки!
    $ sudo sysctl -w vm.swappiness=10

    Помогает только добавление параметра в файл /etc/sysctl.conf

    Ответить
    • Так это естесственно, ведь sysctl -w всего лишь записывает параметр на любом Линукс, а чтоб он оставался после перезагрузки, надо править файл /etc/sysctl.conf или писать команду в скрипт автозапуска, но, чтоб он запускался позже.

      Ответить
  3. Вы советуете изменить значение интенсивности использования пространства подкачки с 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 он будет искать в десять раз больше свободных объектов, чем есть.

      Ответить
  4. Поясните, пожалуйста, такой момент:
    Если файловая система на диске btrfs, а эта файловая система (как я понял) не дружит со swap, то будут ли проблемы с созданием файла подкачки?

    Ответить
  5. Офигеннай сайт - так держать, я прочитал на нем всего 2е инструкции, но думаю уже добавить его в закладки, т.к. на редкость эти мануалы работают...

    Ответить
  6. Всё замечательно получилось вот только как всё вернуть как было не знаю, я не шарю пока в 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
    Не нравится мне то что я натворил 🙁

    Ответить
    • Вы про это: 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 вкладок открыто, вот и вынес наверх половину, т.к. сбоку мне не удобно.

      Ответить
  7. Добрый день. Возникает такая проблема.
    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

      Ответить
  8. Хотел уточнить, у меня на сервере заведен своп раздел, добавление своп файла увеличит общий объем. Раздел и файл могут работать вместе?

    Ответить
  9. А для сохранения этой настройки после перезагрузки:
    sudo sysctl -w vm.swappiness=10
    Это как понять? Ничего не сохраняет!
    про /etc/sysctl.conf я знаю

    Ответить
  10. Как преодолеть ограничение swapon в 230 Гб?
    Как не создавай файл или раздел, всё равно swapon ипсользует и показывает только 230 Гб.

    Ответить

Оставьте комментарий