ZRAM и swap в Linux: как настроить память, чтобы система не тормозила
ZRAM в Linux создаёт сжатую подкачку прямо в оперативной памяти, и при нехватке RAM система не уходит в фризы с дисковым swap. Настраивается за пять минут через zram-generator: один конфиг на четыре строки, перезапуск службы и проверка командой zramctl. Ниже размеры, алгоритмы, swappiness и откат.

Содержание
ZRAM, zswap и обычный swap: в чём разница
Когда оперативная память заканчивается, ядро выгружает редко используемые страницы в подкачку. Вопрос только в том, куда именно.
- Обычный swap это раздел или файл на диске. Объём большой, но на HDD и даже медленном SSD система при активной подкачке начинает заметно подтормаживать.
- ZRAM создаёт в оперативной памяти сжатое блочное устройство
/dev/zram0и использует его как swap. Страницы сжимаются и остаются в RAM. Работает быстро, диск не изнашивается, но объём ограничен самой памятью. - zswap это сжатый кэш перед обычным swap на диске. Страницы сначала сжимаются в памяти, а когда кэш переполняется, самые старые уходят на диск. Без дискового swap zswap бесполезен.
Для домашнего компьютера с 4-16 ГБ памяти ZRAM обычно даёт самый заметный эффект: браузер с кучей вкладок и IDE перестают вызывать фризы. Нужна гибернация (сон с сохранением на диск) или регулярно заканчивается вообще вся память? Тогда понадобится и дисковый swap, о связке ниже.
Как посмотреть, что сейчас используется
# все активные области подкачки и их приоритеты
swapon --show
# устройства zram: алгоритм, размер, сколько данных и сколько они занимают
zramctl
# общая картина памяти
free -h
# включён ли zswap: Y или N
cat /sys/module/zswap/parameters/enabled
# текущее значение swappiness
sysctl vm.swappinessВ выводе zramctl столбец DATA показывает объём выгруженных данных до сжатия, COMPR после сжатия, TOTAL с учётом служебных структур. Отношение DATA к TOTAL и есть реальная экономия на вашей нагрузке.
Что настроено по умолчанию в популярных дистрибутивах
| Дистрибутив | Подкачка из коробки | Пакет для ZRAM |
|---|---|---|
| Fedora 44 | ZRAM через zram-generator, размер min(ram, 8192) МБ, дискового swap нет | zram-generator, уже стоит |
| Ubuntu 26.04 LTS | файл подкачки на диске, ZRAM не включён | systemd-zram-generator или zram-tools |
| Debian 13 | раздел или файл swap, если создан в установщике | systemd-zram-generator или zram-tools |
| Arch Linux | что сами создали, zswap в ядре включён по умолчанию | zram-generator |
Значения в Ubuntu и Debian зависят от варианта установки, поэтому всегда сверяйтесь с swapon --show на своей машине.
Настройка ZRAM через zram-generator
zram-generator это официальный инструмент systemd: он читает конфиг при загрузке, создаёт устройство и включает подкачку. Способ одинаков во всех дистрибутивах.
# Debian, Ubuntu
sudo apt install systemd-zram-generator
# Arch Linux
sudo pacman -S zram-generator
# Fedora: уже установлен, пакет zram-generatorСоздайте файл /etc/systemd/zram-generator.conf:
[zram0]
# половина памяти, но не больше 8 ГБ
zram-size = min(ram / 2, 8192)
compression-algorithm = zstd
swap-priority = 100Применить без перезагрузки:
sudo systemctl daemon-reload
sudo systemctl restart systemd-zram-setup@zram0.service
zramctlВыражение zram-size считается в мегабайтах, ram подставляется автоматически. Без этой строки генератор берёт min(ram / 2, 4096). В Fedora файл в /etc переопределяет системный /usr/lib/systemd/zram-generator.conf. Если служба не поднялась, смотрите systemctl status systemd-zram-setup@zram0, разбор типовых ошибок есть в статье о упавших службах systemd.
Вариант для Debian и Ubuntu: пакет zram-tools
Более старый, но простой способ. Пакет zram-tools ставит службу zramswap с конфигом в /etc/default/zramswap.
sudo apt install zram-tools
sudoedit /etc/default/zramswapВ файле достаточно двух строк:
ALGO=zstd
PERCENT=50sudo systemctl restart zramswap
swapon --showНе ставьте zram-tools и systemd-zram-generator одновременно: оба попытаются занять /dev/zram0.
Какой размер и алгоритм сжатия выбрать
Размер ZRAM задаёт предел несжатых данных, которые можно туда положить. Память выделяется не сразу, а по мере заполнения, поэтому устройство на 8 ГБ при пустом swap почти ничего не стоит.
- 2-4 ГБ RAM: ZRAM на 100 процентов памяти вполне разумен, система будет держать больше вкладок и программ.
- 8-16 ГБ: половина памяти или настройка Fedora min(ram, 8192).
- 32 ГБ и больше: ZRAM почти не нужен, но и не мешает. 4-8 ГБ хватит как подушки.
Алгоритмы: zstd сжимает сильнее и подходит почти всем, lz4 быстрее и меньше нагружает слабый процессор, lzo-rle исторический вариант по умолчанию во многих ядрах. Какие доступны на вашем ядре, видно в cat /sys/block/zram0/comp_algorithm, текущий отмечен квадратными скобками. На очень старом двухъядерном ноутбуке попробуйте lz4, на остальном оставьте zstd. Советы по выбору системы для такого железа собраны в подборке Linux для слабого компьютера.
Swappiness и другие параметры ядра для ZRAM
Значение vm.swappiness по умолчанию 60 рассчитано на медленный дисковый swap. Для ZRAM выгрузка дешёвая, поэтому ядру можно разрешить активнее ей пользоваться: допустимый диапазон 0-200. Набор ниже советуют в ArchWiki, он взят из Pop!_OS:
# /etc/sysctl.d/99-zram.conf
vm.swappiness = 180
vm.watermark_boost_factor = 0
vm.watermark_scale_factor = 125
vm.page-cluster = 0sudo sysctl --system
sysctl vm.swappinesspage-cluster = 0 отключает чтение страниц пачками, для памяти это бессмысленно. Если после изменения система ведёт себя хуже, просто удалите файл и снова выполните sudo sysctl --system.
Меняйте по одному параметру за раз и проверяйте на своей обычной нагрузке: браузер, мессенджеры, IDE или игра. Сравнивайте не цифры в free, а ощущение: пропали ли фризы при переключении окон. Красивое значение swappiness, найденное на форуме, может не подойти вашей машине.
ZRAM вместе с дисковым swap и гибернацией
ZRAM и дисковый swap прекрасно уживаются: ядро сначала использует область с большим приоритетом. Для ZRAM ставим 100, для диска меньше, например 10.
# файл подкачки на ext4
sudo fallocate -l 8G /swapfile
sudo chmod 600 /swapfile
sudo mkswap /swapfile
sudo swapon --priority 10 /swapfile
# на Btrfs файл создаётся отдельной командой
sudo btrfs subvolume create /swap
sudo btrfs filesystem mkswapfile --size 8g /swap/swapfile
sudo swapon --priority 10 /swap/swapfileДля постоянного подключения добавьте строку в /etc/fstab:
/swapfile none swap defaults,pri=10 0 0Гибернация в ZRAM невозможна: содержимое памяти при выключении теряется. Для неё нужен дисковый swap размером не меньше занятой памяти и настроенный параметр resume. Если вы держите и zswap, и ZRAM, zswap лучше выключить параметром ядра zswap.enabled=0, иначе страницы будут сжиматься дважды. Как выделить место под отдельный раздел подкачки, описано в статье про разметку диска.
Если ZRAM не помог или не запустился
- После перезагрузки zramctl пустой. Проверьте
systemctl status systemd-zram-setup@zram0и наличие модуля командойmodinfo zram. В самосборных и некоторых облачных ядрах модуль zram выключен. - Устройство есть, но swapon его не показывает. Скорее всего, одновременно стоят zram-tools и zram-generator и мешают друг другу. Оставьте один инструмент.
- Система всё равно намертво зависает. ZRAM откладывает нехватку памяти, но не отменяет её. Когда сжатый swap заполнен, работу должен спасать убийца процессов: в Fedora и Ubuntu это
systemd-oomd, проверить его можно командойoomctl. На других системах поставьте пакетearlyoom. - Процессор нагружен, ноутбук греется. Сжатие стоит тактов. Переключитесь на
lz4или уменьшите размер ZRAM. Другие способы снизить нагрев и расход заряда описаны в советах про батарею ноутбука. - Swap растёт, хотя память не кончилась. С высоким swappiness так и должно быть: ядро заранее сжимает неактивные страницы и оставляет место под кэш файлов.
Как отключить ZRAM и вернуть всё как было
# выключить подкачку на zram прямо сейчас
sudo swapoff /dev/zram0
# zram-generator: удалить свой конфиг
sudo rm /etc/systemd/zram-generator.conf
# Fedora: пустой конфиг отключает ZRAM по умолчанию
sudo touch /etc/systemd/zram-generator.conf
# zram-tools
sudo systemctl disable --now zramswap
# убрать свои параметры sysctl
sudo rm /etc/sysctl.d/99-zram.conf
sudo sysctl --systemПосле перезагрузки проверьте swapon --show: в списке должен остаться только дисковый swap или ничего. Подробное описание модуля, всех атрибутов в /sys/block/zram0 и режима writeback есть в документации ядра по zram.
Частые вопросы
Нужен ли swap, если стоит ZRAM?
Для обычной работы ZRAM достаточно. Дисковый swap нужен для гибернации и как запас, если память регулярно заканчивается полностью.
Сколько памяти отдавать под ZRAM?
Обычно половину RAM, на 2-4 ГБ можно до 100 процентов. Память занимается только по мере заполнения устройства.
Чем ZRAM отличается от zswap?
ZRAM это самостоятельное сжатое устройство подкачки в памяти. zswap это сжатый кэш перед дисковым swap и без него не работает.
Какой алгоритм сжатия выбрать?
zstd для большинства машин. На слабых процессорах можно попробовать lz4, он быстрее, но сжимает слабее.
Работает ли гибернация с ZRAM?
Нет, содержимое ZRAM пропадает при выключении. Для гибернации нужен дисковый swap размером не меньше используемой памяти.
Документация и источники
- zram: Compressed RAM-based block devices, The Linux Kernel documentation, 2026
- zram-generator и zram-generator.conf.example, systemd project, GitHub, 2026
- Changes/SwapOnZRAM, Fedora Project, 2020
- Zram, ArchWiki, 2026
- Documentation for /proc/sys/vm, The Linux Kernel documentation, 2026
Читайте также
Команды проверены на актуальных версиях дистрибутивов на момент обновления. Перед изменением системных настроек сделайте резервную копию.