Когда в машине 2–4 ГБ памяти, современный браузер и контейнеры быстро вытесняют систему в swap. Жёсткий диск в этой роли работает медленно, а SSD получает лишнюю нагрузку. zram решает проблему иначе: сжимает страницы памяти и хранит их в оперативной памяти, создавая блочное устройство под swap. Обмен становится быстрее, но не бесплатным — тратится процессор. Ниже — как оценить ситуацию, настроить zram через systemd, добавить страховочный swap-файл и проверить результат без иллюзий.
Чем zram отличается от swap-файла и zswap
Обычный swap — это область на диске. Ядро выгружает туда редко используемые страницы, освобождая память. zram создаёт в RAM блочное устройство и сжимает всё, что в него попадает. При чтении данные распаковываются обратно. Если коэффициент сжатия близок к двум, гигабайт zram вмещает около двух гигабайт исходных данных, но реальная цифра зависит от содержимого: текст и код сжимаются хорошо, уже сжатые фото и видео — почти нет.
zswap — третий вариант: промежуточный кэш перед дисковым swap. Страницы сначала сжимаются в памяти, а при нехватке места уходят на диск. zram и zswap вместе обычно не настраивают, чтобы не усложнять учёт. Для слабой машины с быстрым CPU разумнее zram плюс небольшой диск swap как аварийный резерв. Для сервера с большим объёмом памяти zram чаще не нужен вовсе.
Диагностика: сколько памяти реально не хватает
Начните с фактов. free -h показывает доступную память и занятость swap, swapon --show — активные устройства и приоритеты, zramctl — состояние zram. Давление на память точнее отражает /proc/pressure/memory: если показатель some растёт, процессы ждут освобождения страниц. Высокий si/so в vmstat означает активный обмен, а не просто занятый swap.
free -h
swapon --show
zramctl
cat /proc/pressure/memory
vmstat 1 5
Проверьте, не съедает ли память конкретный процесс. ps_mem и smem дают более честную картину, чем сумма из top, потому что учитывают общие страницы. Если память занята кэшем файлов, это нормально: ядро отдаст её при необходимости. Проблема начинается, когда растёт именно анонимная память и приложения постоянно ждут ввода-вывода.
Настройка zram через systemd-zram-generator
В Debian и Ubuntu удобнее всего генератор systemd: пакет systemd-zram-generator. В Fedora и Arch он называется zram-generator. Создайте файл /etc/systemd/zram-generator.conf и укажите размер, алгоритм и приоритет. Для машины с 4 ГБ разумно начать с половины объёма и алгоритма zstd: он даёт хороший баланс скорости и степени сжатия. Размер больше объёма RAM бессмыслен.
sudo apt install systemd-zram-generator
sudo tee /etc/systemd/zram-generator.conf <<'EOF'
[zram0]
zram-size = min(ram / 2, 4096)
compression-algorithm = zstd
swap-priority = 100
fs-type = swap
EOF
sudo systemctl daemon-reload
sudo systemctl start systemd-zram-setup@zram0.service
После запуска проверьте zramctl и swapon --show. Устройство должно иметь приоритет выше дискового swap, чтобы ядро сначала использовало сжатый обмен. Если сервис не стартовал, посмотрите systemctl status systemd-zram-setup@zram0.service и журнал journalctl -u systemd-zram-setup@zram0.service. Частая причина — опечатка в выражении размера или отсутствие модуля zram в ядре.
Вариант для Debian и Ubuntu: zram-tools
Если генератор недоступен, подойдёт пакет zram-tools. Его настройки лежат в /etc/default/zramswap. Параметр PERCENT задаёт долю от памяти, ALGO — алгоритм, PRIORITY — приоритет относительно других swap-устройств. После изменения файла перезапустите сервис и снова проверьте состояние.
sudo apt install zram-tools
sudo sed -i 's/^#\?ALGO=.*/ALGO=zstd/' /etc/default/zramswap
sudo sed -i 's/^#\?PERCENT=.*/PERCENT=50/' /etc/default/zramswap
sudo systemctl restart zramswap
zramctl
Не смешивайте два механизма одновременно: если работают и generator, и zram-tools, появится несколько устройств и путаница с приоритетами. Выберите один способ и удалите настройки второго. Ручная настройка через modprobe zram требует отдельного unit-файла и нужна редко.
Swap-файл как страховка
zram не спасает, если приложение резко запросило больше памяти, чем есть физически. Небольшой swap-файл на SSD даёт запас и позволяет пережить пик без убийства процессов. Создайте файл, выставьте права, инициализируйте его и добавьте запись в /etc/fstab. Для 4 ГБ RAM достаточно 2 ГБ swap, для 8 ГБ — 1–2 ГБ.
sudo fallocate -l 2G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon /swapfile
echo '/swapfile none swap sw 0 0' | sudo tee -a /etc/fstab
swapon --show
Параметр vm.swappiness управляет тем, насколько охотно ядро выгружает анонимные страницы. При zram значение 100–150 встречается чаще, чем классические 60, но это не догма: на сервере с базой данных агрессивный обмен может навредить. Меняйте параметр через файл в /etc/sysctl.d/ и проверяйте эффект на реальной нагрузке, а не по советам из интернета.
Что проверить после настройки
zramctlпоказывает ненулевые DATA и COMPR — сжатие действительно работает.swapon --showподтверждает приоритеты: zram выше дискового файла.vmstat 1не показывает постоянного роста si/so при обычной работе./proc/pressure/memoryостаётся спокойным под типовой нагрузкой.- После перезагрузки сервис поднимается автоматически, swap-файл монтируется.
Для детального наблюдения выведите отдельные поля zram и проверьте, какой алгоритм реально используется. Значения DATA и COMPR показывают исходный и сжатый объём, а MEM/LIMIT — сколько памяти занято под устройство. Если сжатие близко к единице, zram почти не помогает и только расходует CPU.
zramctl --output NAME,ALGORITHM,DISKSIZE,DATA,COMPR,MEM
cat /sys/block/zram0/comp_algorithm
sysctl vm.swappiness
Если система стала медленнее, а CPU загружен распаковкой, уменьшите размер zram или смените алгоритм на более быстрый lz4. Если память всё равно заканчивается, zram лишь отодвигает проблему: нужно сокращать число сервисов, ставить лимиты через cgroups или добавлять физическую память. Сжатие не создаёт ресурс из воздуха.
Итог
zram — практичный способ ускорить обмен на машинах с малым объёмом RAM: он снижает нагрузку на диск и уменьшает задержки, пока процессор справляется со сжатием. Настройка занимает несколько минут, но требует наблюдения: размер, алгоритм и swappiness подбираются под нагрузку. Держите небольшой дисковый swap как страховку, следите за давлением на память и не ждите, что сжатие заменит апгрейд. Тогда система с 4 ГБ останется отзывчивой в повседневных задачах.