Память стоит недорого и при её нехватке проще докупить. Но иногда это сделать невозможно, например, во многих современных ноутбуках память распаяна.
На этот случай есть SWAP (своп). Это файл или область на диске, которая используется в качестве резервного места. Когда основная память заканчивается, данные частично переносятся туда.
Есть мнение, что своп — это плохо, особенно для SSD-диска. Может быть так и было на начальном этапе, но сейчас ресурс таких дисков достаточно велик, и они быстрее устаревают, нежели выходят из строя из-за частых операций записи.
Скорость работы современных дисков SSD велика, соответственно своп на них сильно выручает при нехватке памяти, не сказываясь ощутимо на производительности компьютера. Ну, во всяком случае при обычном использовании.
Я убедился в этом на компьютере с 16Гб памяти. Для кого-то может быть и этот объем кажется существенным. Но на самом деле по сегодняшним меркам — это минимум. Это подтверждает и стоимость памяти. Две планки DDR4 суммарной ёмкостью 32Гб можно купить начиная от 6000 руб.
В общем ситуация — компьютер декстоп используется без выключения. На нём Gnome, Firefox, VSCode, Nodejs, ну и всякий другой рабочий софт. После запуска, первые 1-2 дня работает без проблем. Потом память могла кончится. Больше всего съедают память Firefox и VSCode.
Последствия:
- Ubuntu 22.04 при нехватке памяти начинала тупить, но спустя секунд 5-10 убивала сама Firefox или VSCode, и возвращалась к нормальной работе.
- Fedora 39 при нехватке памяти не тупит, сразу, как и Ubuntu убивает тяжелые процессы.
- Debian 12 при нехватке памяти переставала отвечать. Курсор мыши не двигался, никакие кнопки и комбинации на клавиатуре не работали.
С утечками памяти бороться сложно, нет существенного эффекта. Если периодически перезапускать самые тяжелые 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
после этого можно удалить.