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

Дмитрий Корнев
14 октября 2023

Память стоит недорого и при её нехватке проще докупить. Но иногда это сделать невозможно, например, во многих современных ноутбуках память распаяна.

На этот случай есть SWAP (своп). Это файл или область на диске, которая используется в качестве резервного места. Когда основная память заканчивается, данные частично переносятся туда.

Есть мнение, что своп — это плохо, особенно для SSD-диска. Может быть так и было на начальном этапе, но сейчас ресурс таких дисков достаточно велик, и они быстрее устаревают, нежели выходят из строя из-за частых операций записи.

Скорость работы современных дисков SSD велика, соответственно своп на них сильно выручает при нехватке памяти, не сказываясь ощутимо на производительности компьютера. Ну, во всяком случае при обычном использовании.

Я убедился в этом на компьютере с 16Гб памяти. Для кого-то может быть и этот объем кажется существенным. Но на самом деле по сегодняшним меркам — это минимум. Это подтверждает и стоимость памяти. Две планки DDR4 суммарной ёмкостью 32Гб можно купить начиная от 6000 руб.

В общем ситуация — компьютер декстоп используется без выключения. На нём Gnome, Firefox, VSCode, Nodejs, ну и всякий другой рабочий софт. После запуска, первые 1-2 дня работает без проблем. Потом память могла кончится. Больше всего съедают память Firefox и VSCode.

Последствия:

С утечками памяти бороться сложно, нет существенного эффекта. Если периодически перезапускать самые тяжелые Firefox и VSCode, то это помогает лишь на какое-то время. Кроме названных программ видимо едят память и другие, т.к. вначале при перезапуске компьютера свободной памяти всегда сильно больше.

В качестве решения, во-первых, для Debian стоит установить пакет earlyoom, чтобы в критической ситуации он мог отстрелить тяжёлые процессы, как это делает Ubuntu. Это лучше, чем просто зависнуть. Установка:

sudo apt install earlyoom

Во-вторых, включаем своп. Я создал своп 32Гб.

Посмотреть текущий своп:

swapon

Просмотр информации о памяти и свопе:

free -m

Для Debian создать файл swapfile для свопа 32Гб можно прямо в корне:

fallocate -l 32G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile

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

btrfs subvolume create /swap
cd /swap
truncate -s 0 ./swapfile
chattr +C ./swapfile
chmod 600 ./swapfile
dd if=/dev/zero of=/swap/swapfile bs=1M count=32768
mkswap /swap/swapfile
swapon /swap/swapfile

Последняя строка в том и другом случае — это активация свопа, после неё можно уже проверять результат командами, которые были выше.

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

/swapfile swap swap defaults 0 0
/swap/swapfile swap swap defaults 0 0

Удаление или изменение свопа

Если нужно изменить размер свопа, проще всего удалить старый и создать новый.

Отключение свопа:

swapoff -v /swapfile

Если своп вам больше не нужен, то удалите строчку, которую мы прописывали в файле /etc/fstab. Ну и сам файл свопа swapfile после этого можно удалить.

3 комментария

Жо
Ну чо, красиво. 16 ГБ оперативы, все и всё сжирается и на вишенку 32Гб своп. Эхлинух
Ди
Приветствую. А zram не улучшает ситуацию?
Не знал про такое. Спасибо за комментарий. Почитал в интернете. На хабре есть статья. Пока для меня не актуально, недавно расширил память, но буду иметь в виду, при случае попробую.