Память стоит недорого и при её нехватке проще докупить. Но иногда это сделать невозможно, например, во многих современных ноутбуках память распаяна.
На этот случай есть SWAP (своп). Это файл или область на диске, которая используется в качестве резервного места. Когда основная память заканчивается, данные частично переносятся туда.
Есть мнение, что своп — это плохо, особенно для SSD-диска. Может быть так и было на начальном этапе, но сейчас ресурс таких дисков достаточно велик, и они быстрее устаревают, нежели выходят из строя из-за частых операций записи.
Скорость работы современных дисков SSD велика, соответственно своп на них сильно выручает при нехватке памяти, не сказываясь ощутимо на производительности компьютера. Ну, во всяком случае при обычном использовании.
Я убедился в этом на компьютере с 16Гб памяти. Для кого-то может быть и этот объем кажется существенным. Но на самом деле по сегодняшним меркам — это минимум. Это подтверждает и стоимость памяти. Две планки DDR4 суммарной ёмкостью 32Гб можно купить начиная от 6000 руб.
В общем ситуация — компьютер декстоп используется без выключения. На нём Gnome, Firefox, VSCode, Nodejs, ну и всякий другой рабочий софт. После запуска, первые 1-2 дня работает без проблем. Потом память могла кончится. Больше всего съедают память Firefox и VSCode.
Последствия:
- Ubuntu 22.04 при нехватке памяти начинала тупить, но спустя секунд 5-10 убивала сама Firefox или VSCode, и возвращалась к нормальной работе.
- Debian 12 при нехватке памяти переставал отвечать. Курсор мыши не двигался, никакие кнопки и комбинации на клавиатуре не работали.
С утечками памяти бороться сложно, нет существенного эффекта. Если периодически перезапускать самые тяжелые Firefox и VSCode, то это помогает лишь на какое-то время. Кроме названных программ видимо едят память и другие, т.к. вначале при перезапуске компьютера свободной памяти всегда сильно больше.
В качестве решения, во-первых, для Debian стоит установить пакет earlyoom, чтобы в критической ситуации он мог отстрелить тяжёлые процессы, как это делает Ubuntu. Это лучше, чем просто зависнуть. Установка:
sudo apt install earlyoom
Во-вторых, включаем своп. Я создал своп 32Гб.
Всё, что написано ниже проверенно в Debian 12.
Настройка свопа
Посмотреть текущий своп:
swapon
Просмотр информации о памяти и свопе:
free -m
Создаём файл swapfile
для свопа 32Гб в корне, устанавливаем права и активируем:
fallocate -l 32G /swapfile
chmod 600 /swapfile
mkswap /swapfile
swapon /swapfile
В файл /etc/fstab
добавляем строчку:
/swapfile swap swap defaults 0 0
Проверяйте результат командами, которые были вначале.
Удаление или изменение свопа
Если нужно изменить размер свопа, проще всего удалить старый и создать новый.
Отключение свопа:
swapoff -v /swapfile
Если своп вам больше не нужен, то удалите строчку, которую мы прописывали в файле /etc/fstab
. Ну и сам файл свопа swapfile
после этого можно удалить.