Подробный гайд по zram, zswap и защите от OOM: Как увеличить RAM на VPS с 1-2 ГБ

Как увеличить RAM на VPS с 1-2 ГБ? Гайд по настройке zram и zswap для сжатия памяти, оптимизации ядра Linux и защиты сервера от падений OOM.

2026.07.19                  


Подробный гайд по zram, zswap и защите от OOM: Как увеличить RAM на VPS с 1-2 ГБПодробный гайд по zram, zswap и защите от OOM: Как увеличить RAM на VPS с 1-2 ГБ Запуск современных стеков (Node.js, PostgreSQL, Docker, тяжелые PHP-фреймворки) на VPS с 1–2 ГБ оперативной памяти — это классическая задача, которая часто заканчивается ошибкой Out Of Memory (OOM).

Использование сжатия памяти — это действительно «магическая таблетка» для таких серверов. Однако в сообществе часто возникает путаница между двумя технологиями: zswap и zram.

Чтобы ваш сервер работал стабильно, давайте разберем обе технологии, настроим их правильно и выжмем максимум из ваших 1–2 ГБ.


Важное уточнение: zswap vs zram

Прежде чем настраивать, нужно понять разницу, так как они работают по-разному:

  1. zswap (Compressed Swap Cache) — это кэш для свопа. Когда ядро хочет выгрузить страницу памяти на медленный диск (в swap-файл), zswap перехватывает её, сжимает и кладет в специально выделенную область оперативной памяти. Если эта область переполняется, самые старые страницы всё равно сбрасываются на диск.

Плюс:

Резко снижает износ SSD и убирает "тормоза" при обращении к диску.

Минус:

Требует наличия классического swap-файла на диске.


  1. zram (Compressed RAM Block Device) — создает виртуальный блочный устройство прямо в оперативной памяти. Swap-файл на диске не нужен вообще. Все выгружаемые страницы сжимаются и лежат в RAM.

Плюс:

Идеально для VPS с 1-2 ГБ. Позволяет "растянуть" память без обращения к диску.

Минус:

Требует чуть больше CPU на сжатие.


Стратегия для VPS 1-2 ГБ:

Мы настроим zram как основной инструмент "растягивания" памяти, а zswap включим как дополнительный кэш, если вы всё же решите оставить дисковый swap.


Часть 1. Настройка zram (Основной инструмент для 1-2 ГБ)

Именно zram позволяет получить те самые коэффициенты сжатия 2:1 или 3:1, превращая 2 ГБ физической памяти в ~4-5 ГБ виртуальной.

1. Установка утилит

Для Debian/Ubuntu:

sudo apt update
sudo apt install zram-tools

(Для AlmaLinux/Rocky: sudo dnf install zram-generator)


2. Выбор алгоритма сжатия (Критически важно!)

От алгоритма зависит баланс между нагрузкой на CPU и степенью сжатия.

LZ4:

Очень быстрый, минимальная нагрузка на CPU. Коэффициент сжатия: 1.5:1 – 2:1. (Рекомендуется для VPS с 1 ядром).

Zstd (Zstandard):

Отличный баланс. Коэффициент сжатия: 2.5:1 – 3:1. (Рекомендуется для VPS с 2+ ядрами).


3. Конфигурация zram

Откройте файл конфигурации:

sudo nano /etc/default/zramswap

Приведите его к следующему виду (раскомментируйте и измените нужные строки):

# Алгоритм сжатия. Zstd дает лучшее сжатие (до 3:1)
ALGO=zstd

# Размер виртуальной памяти. 
# Для VPS с 2 ГБ RAM ставим 100-150% от физ. памяти. 
# Если RAM 1 ГБ, ставим 150-200%.
PERCENT=150

# Приоритет. Должен быть выше, чем у дискового свопа (обычно -1 или -2)
PRIORITY=100

4. Применение настроек

Перезапустите службу:

sudo systemctl restart zramswap

Проверьте, что устройство создалось и работает:

zramctl

Вы должны увидеть /dev/zram0 с алгоритмом zstd и выделенным объемом.


Часть 2. Настройка zswap (Если используется дисковый Swap)

Если вы используете классический swap-файл на диске и хотите ускорить его с помощью zswap.

1. Проверка поддержки ядром

cat /sys/module/zswap/parameters/enabled

Если выводит N, нужно включить.


2. Включение и настройка через GRUB

Откройте конфигурацию GRUB:

sudo nano /etc/default/grub

Найдите строку GRUB_CMDLINE_LINUX_DEFAULT и добавьте в неё параметры:

zswap.enabled=1 zswap.compressor=zstd zswap.max_pool_percent=25

Примечание:

max_pool_percent=25 означает, что zswap может занять до 25% от всей физической RAM для хранения сжатых страниц. Для VPS с 1-2 ГБ можно аккуратно увеличить до 30, но следите за нехваткой памяти для самих приложений.*


3. Обновление загрузчика и перезагрузка

sudo update-grub
sudo reboot

После перезагрузки проверьте статус:

cat /sys/module/zswap/parameters/enabled  # Должно быть Y

Часть 3. Тонкая настройка ядра (Sysctl)

Чтобы ядро Linux правильно использовало сжатую память и не "убивало" процессы раньше времени, нужно изменить параметры виртуальной памяти.

Откройте или создайте файл sysctl:

sudo nano /etc/sysctl.d/99-vps-memory.conf

Добавьте следующие строки:

# vm.swappiness
# Для zram/zswap своппинг в сжатую RAM очень дешев. 
# Можно смело ставить 60-80. Это заставит ядро активнее сжимать неактивные страницы,
# освобождая "чистую" RAM для кэша файлов (что ускорит работу сайта/БД).
vm.swappiness = 60

# vm.vfs_cache_pressure
# По умолчанию 100. Уменьшаем до 50, чтобы ядро агрессивнее хранило 
# inode и dentry (структуры файловой системы) в памяти.
vm.vm.vfs_cache_pressure = 50

# vm.watermark_scale_factor
# Увеличиваем запас свободной памяти, чтобы ядро раньше начинало 
# фоновое сжатие (kswapd) и не уходило в прямое сжатие (которое фризит систему).
# Значение 1000 = 10% от зоны памяти.
vm.watermark_scale_factor = 1000

Примените настройки:

sudo sysctl --system

Часть 4. Спасательный круг: earlyoom

На VPS с 1-2 ГБ RAM, когда память (даже сжатая) заканчивается, ядро вызывает OOM Killer. Стандартный OOM Killer часто работает слишком долго, из-за чего сервер "зависает" на несколько минут, и вы даже не можете подключиться по SSH, чтобы посмотреть, что случилось.

Решение:

Установите earlyoom. Он следит за памятью и убивает самый "прожорливый" процесс (например, упавший в цикл PHP-воркер или MySQL), до того, как система полностью зависнет.

# Для Debian/Ubuntu
sudo apt install earlyoom
sudo systemctl enable --now earlyoom

Это сохранит вам часы нервов при настройке тяжелого стека на слабом VPS.


Важно

1. Если у вас 1 vCPU:

Используйте zram с алгоритмом LZ4. Сжатие будет чуть хуже (2:1), но процессор не захлебнется.


2. Если у вас 2+ vCPU:

Используйте zram с алгоритмом zstd. Вы получите сжатие до 3:1, фактически превратив 2 ГБ RAM в ~5 ГБ.


3. Дисковый swap:

Если вы используете zram на 100-150%, дисковый swap-файл можно вообще не создавать, чтобы сэкономить место на SSD и избежать лишнего I/O.


4. Мониторинг:

Периодически проверяйте, как работает сжатие, командой dmesg | grep zram или cat /sys/block/zram0/mm_stat. Обращайте внимание на колонку mem_used_total (сколько физ. памяти занято) и orig_data_size (сколько данных сжато). Их соотношение покажет ваш реальный коэффициент сжатия.


Эти настройки позволят вашему VPS с 1-2 ГБ RAM комфортно держать связку Nginx + PHP-FPM + Redis + небольшой PostgreSQL, или запускать легкие Docker-контейнеры, без постоянных падений по OOM.


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


Статью подготовил: Денис Аверко @Nymexis г. Омск

Комментарии

Загрузка...
Если комментарии не загружаются, можете попробовать отключить блокировщик рекламы для этого сайта