Как добавить swap в Linux Ubuntu/Debian

При работе с оперативной памятью Linux делит всё доступное пространство на куски, называемые страницами. Чтобы разгрузить занятое пространство при переполнении физической памяти, используется технология виртуальной памяти или swap, которая заключается в вынесению наименее нужных в данный момент для работы страниц на дисковое пространство в специальный раздел или файл на диске. Таким образом, использование swap позволяет использовать в системе больше оперативной памяти, чем доступно физически.

Тем не менее, такой подход имеет недостаток: жесткие диски гораздо медленнее, чем оперативная память, поэтому производительность компьютера заметно ухудшается при выходе за пределы доступной физической памяти.

Как узнать текущий размер swap

Команда swapon -s показывает, имеются ли в системе файлы/разделы подкачки и какой они составляют размер.

Как создать swap

На уже установленной системе (особенно в случае с VPS) проще всего создать файл подкачки, нежели производить манипуляции с выделением свободного места на диске под отдельный раздел. Создаем swap-файл в удобном для нас месте (например прям в корне системы):

sudo dd if=/dev/zero of=/swapfile bs=1024 count=1024k
sudo mkswap /swapfile
sudo swapon /swapfile

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

Добавим подключение файла при загрузке системы, для этого вставим строчку в файл /etc/fstab:

/swapfile none swap sw 0 0

Как удалить swap

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

swapoff /swapfile

Управление использованием swap

Параметр vm.swappiness отвечает за процент свободной памяти, который необходимо оставлять в системе, во избежание ошибок «out-of-memory«. По умолчанию, параметр имеет значение 60. Иными словами, при 100-60=40% занятой памяти, система уже начнет использовать раздел swap. При большом количестве ОЗУ в компьютере, лучше уменьшить параметр vm.swappiness, чтобы активнее использовать незадействованную память:

echo vm.swappiness = 10 | sudo tee -a /etc/sysctl.conf

Ссылки: