Центр Диагностики & База Системных Ошибок

Решения для Windows Server, Active Directory, 1С, СУБД, Linux, Cisco, MikroTik и IP-телефонии.

⚠️ Важная информация Все материалы, инструкции, команды и скрипты предоставлены исключительно в ознакомительных целях. Их применение может повлиять на работу операционной системы, баз данных и сетевого оборудования. Перед выполнением действий обязательно создайте резервную копию. При отсутствии необходимой квалификации обратитесь к ИТ-специалистам.
zswap: pool limit reached, refusing compressed page storage Linux / DevOps

zswap: pool limit reached — Тюнинг сжатия памяти zswap в Linux

Обновлено: 18.08.2026  ·  Официальная база знаний

Архитектура ошибки и симптомы сбоя

Сообщение «zswap: pool limit reached, refusing compressed page storage» генерируется подсистемой сжатого кэширования страниц zswap. zswap перехватывает страницы, отправляемые ядром в файл подкачки (Swap), сжимает их в оперативной памяти и сохраняет в динамическом пуле. Ошибка означает, что суммарный объем сжатого пула достиг лимита (по умолчанию max_pool_percent = 20% от RAM). В результате zswap прекращает принимать новые страницы и начинает сбрасывать несжатые данные на физический диск (Swap Device), вызывая дисковую перегрузку.

Диагностическая таблица параметров сбоя

ПараметрЗначениеИнженерный смысл сбоя
max_pool_percentDefault: 20%Максимальный процент физической оперативной памяти, отводимый под zswap пул.
zpool allocatorz3fold / zbud / zsmallocАллокатор упаковки нескольких сжатых страниц в один физический фрейм памяти.
compressorzstd / lz4 / lzoАлгоритм компрессии (скорость vs коэффициент сжатия).

Пошаговое дерево решений и сценарии траблшутинга

Сценарий 1: Проверка текущей утилизации пула zswap

# Просмотр статистики zswap через debugfs (или sysfs):
sudo grep -R . /sys/kernel/debug/zswap/ 2>/dev/null || grep -R . /sys/module/zswap/parameters/

# Просмотр процента сжатия и числа сброшенных страниц (pool_total_size, reject_pool_limit):
cat /sys/kernel/debug/zswap/reject_pool_limit
cat /sys/kernel/debug/zswap/stored_pages

Сценарий 2: Увеличение лимита памяти для zswap пула

Увеличьте максимальный процент памяти, выделяемый под zswap (например, до 40%):

# Увеличение лимита пула на лету:
echo 40 | sudo tee /sys/module/zswap/parameters/max_pool_percent

# Закрепление в параметрах загрузки ядра GRUB (/etc/default/grub):
GRUB_CMDLINE_LINUX="zswap.enabled=1 zswap.max_pool_percent=40"
sudo update-grub

Сценарий 3: Переход на эффективный аллокатор z3fold и быстрый компрессор ZSTD

Аллокатор z3fold упаковывает до трех сжатых страниц в одну физическую, а алгоритм zstd дает максимальный коэффициент сжатия:

# Настройка параметров модуля zswap:
echo zstd | sudo tee /sys/module/zswap/parameters/compressor
echo z3fold | sudo tee /sys/module/zswap/parameters/zpool

# Включение вытеснения самых старых страниц (LRU reject):
echo 1 | sudo tee /sys/module/zswap/parameters/accept_threhsold_percent
Сервер испытывает сильные задержки из-за медленного Swap на HDD/SSD?
ITSTM выполнит тонкую настройку подсистем Zswap/Zram, тюнинг агрессивности vm.swappiness и обеспечит высокую отзывчивость системы при нехватке RAM.
Практический опыт инженера: При использовании быстрых NVMe-накопителей выставляйте zswap.compressor=lz4 и max_pool_percent=30 — это дает наилучший баланс между экономией RAM и отсутствием всплесков утилизации CPU.

Частые вопросы (FAQ)

Чем zswap отличается от zram?

zram создает в памяти виртуальное блочное устройство swap, не требующее физического диска (при переполнении процесс убивается OOM). zswap работает как кэш поверх реального дискового swap-раздела: если сжатый пул zswap заполняется, страницы прозрачно сбрасываются на физический диск.

Почему компрессор LZ4 предпочтительнее ZSTD на нагруженных CPU?

LZ4 потребляет минимум процессорных тактов на декомпрессию, снижая накладные расходы ядра, тогда как ZSTD сжимает лучше на 10–15%, но создает большую нагрузку на CPU.

Как отключить zswap, если используется zram?

Использовать zswap и zram одновременно крайне не рекомендуется. Отключите zswap командой: echo 0 | sudo tee /sys/module/zswap/parameters/enabled.

Что показывает метрика pool_limit_hit?

Она показывает суммарное число страниц, которые zswap отказался сжимать из-за достижения max_pool_percent, отправив их напрямую на диск.