Если ты администратор или DevOps-инженер, скорее всего, сталкивался с ситуацией, когда оперативная память заканчивается, система начинает использовать файл подкачки, и производительность падает в пропасть. На первый взгляд, проблема кажется неизбежной. Но Windows уже давно имеет встроенный механизм, который помогает этого избежать — Memory Compression (сжатие памяти).
В этой статье разберёмся, как это работает изнутри, когда имеет смысл включать/отключать эту фишку, как настроить её под конкретный hardware, и какие подводные камни ждут на практике. Материал ориентирован на Windows 11 25H2 и актуален на ноябрь 2025 года.
Что произошло в истории: от Windows 10 до Windows 11
Memory Compression появился в Windows 10 (сборка 1507, октябрь 2015) и Windows Server 2016. Однако на серверных ОС эта фишка отключена по умолчанию — Microsoft предположила, что в датацентре хватает памяти и компрессия будет только "жрать" CPU. На клиентских машинах всё иначе: для пользователей ноутбуков и офисных ПК экономия памяти намного ценнее, чем несколько процентов CPU.
В Windows 11 алгоритмы сжатия были переработаны: уменьшилась пенальти на CPU, добавлена лучшая поддержка low-memory устройств (планшеты, ультрабуки). Компрессия теперь работает даже при наличии свободной памяти, если система заметит, что это полезно.
Как это работает внутри: механика сжатия
Когда памяти становится мало, Windows не спешит писать неиспользуемые страницы памяти на диск в pagefile. Вместо этого операционная система:
- Определяет кандидатов на сжатие — неиспользуемые или редко访问аемые 4 КБ страницы (страница памяти = 4 KiB)
- Сжимает их с помощью XPRESS LZ77 — это Microsoft-овский вариант LZ77, модифицированный для скорости
- Складирует в Compression Store — отдельный регион памяти, управляемый ядром, где хранятся сжатые страницы
- Деcompresс по требованию — когда приложение обращается к странице, она распаковывается на лету
Скорость сжатия в реальности: ~320 МБ/сек, декомпрессии: ~440 МБ/сек (тест на Intel i7-4770K, Windows 10 Anniversary). Коэффициент сжатия зависит от типа данных — текст и структурированные данные сжимаются хорошо, а случайные последовательности (или уже сжатые файлы) практически не сжимаются.
Важное замечание: Все операции выполняет Memory Compression процесс, который встроен в System (ядро). Он работает однопоточно, поэтому на многоядерных системах нагрузка может показаться маленькой, хотя на одно ядро она может быть заметной.
Когда compression действительно даёт бонус
Результаты зависят от сценария использования:
✅ Включайте compression, если:
- На машине 4–8 ГБ ОЗУ и нет в планах расширять
- Работаете в многопроцессном окружении: несколько браузеров, IDE, виртуальные машины
- Используется много похожих приложений (несколько экземпляров Chrome, например) — одинаковые данные хорошо сжимаются
- Диск HDD или медленный SSD — компрессия все равно быстрее, чем пейджинг на диск
- Батарея/питание от сети (не ноутбук на батарее)
❌ Отключайте или не заморачивайтесь, если:
- У вас 16+ ГБ ОЗУ и вы не запускаете resource-heavy приложения одновременно
- Процессор старый (pre-2015) или слабый (Atom, Celeron N-series) — compression может замедлить систему больше, чем помочь
- Батарея критична — сжатие/развжатие = лишние циклы CPU = быстрее умирает батарея
- Вы запускаете высокочастотные низколатентные приложения (High-Frequency Trading, real-time обработка) — даже микросекундные задержки на деcompression могут быть неприемлемы
Из практики: на Go-EUC тесте (Citrix Virtual Apps) при properly-sized среде compression включённый не показал ощутимых плюсов в производительности, но значительно сократил дисковый I/O (файл подкачки практически не использовался). В undersized средах (когда памяти точно не хватает) — compression экономит ~30–50% от того, что пришлось бы писать на диск.
Практический набор команд: диагностика и настройка
Проверка текущего статуса
# Запусти PowerShell as Administrator и посмотри, включена ли compression
Get-MMAgent
# Результат будет примерно такой:
# ApplicationLaunchPrefetching : True
# ApplicationPreLaunch : True
# MaxOperationAPIFiles : 512
# MemoryCompression : True <-- Это то, что нас интересует
# OperationAPI : True
# PageCombining : True
True = включена, False = отключена. Если видишь False, переходи к следующему пункту.
Включение и отключение
# Включить compression
Enable-MMAgent -mc
# Отключить compression
Disable-MMAgent -mc
# После любых изменений обязателен перезагрузка, либо рестарт SysMain сервиса
Restart-Service SysMain
# Проверить статус SysMain
Get-Service SysMain
# Должен быть Running
Мониторинг в реальном времени
Откройте Task Manager (Ctrl + Shift + Esc):
- Перейдите в Performance → Memory
- Смотрите на строку "In use (Compressed)" — это показывает, сколько сейчас сжато памяти
- Наведите мышь на график — увидите детали:
- Физическая память всего
- Использовано
- Сжато (обычно в скобках)
Пример: "8.0 GB out of 16.0 GB (373 MB compressed)" — это значит, что 373 МБ занимает уже сжатая память, а если бы она была несжата, она занимала бы ~1.5 ГБ (в зависимости от коэффициента).
Детальный анализ с PowerShell
Для более глубокого анализа:
# Получить процесс Memory Compression (в Windows 11 он встроен в System)
Get-Process | Where-Object { $_.ProcessName -eq "System" }
# Просмотр памяти в Process Monitor или Resource Monitor (resmon)
# В resmon: Вкладка Memory → смотрите "Hard Faults/sec" (если compression отключен, будет выше)
🔖Дорогие гости и подписчики канала. Если наши материалы приносят вам пользу, вы всегда можете поддержать команду символическим переводом. Любая помощь мотивирует писать для Вас больше полезного и качественного контента безо всяких подписок.🙏🤝🙏🤝🙏
💰ПОДДЕРЖАТЬ КАНАЛ МОЖНО ТУТ ( ОТ 50 РУБЛЕЙ )💰
Или сделать любой перевод по QR-коду через СБП. Быстро, безопасно и без комиссии.(Александр Г.)
С уважением, Команда "Т.Е.Х.Н.О Windows & Linux".
Реестр: что можно подстроить
Осторожно! Редактирование реестра может всё сломать. Делайте это, только если вы знаете, что делаете.
HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Control\Session Manager\Memory Management
Здесь могут быть флаги для fine-tuning, но в Windows 11 большинство настроек управляются через PowerShell (MMAgent) и WMI, а не напрямую через реестр.
Старый способ (не рекомендуется):
HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows NT\CurrentVersion\Superfetch
AdminDisable — bitmask для отключения фич (0x0200 = compression, 0x0100 = page combining)
Но менять это напрямую — архаизм. Используй PowerShell.
Best Practices для системных администраторов
На клиентских машинах (Windows 11)
На серверах (Windows Server 2016/2019/2022)
Compression отключена по умолчанию. Включайте её только если:
- Физической памяти меньше, чем требуется workload
- Вы готовы потратить CPU cycles на экономию памяти
- Это VDI/Citrix окружение с множеством похожих ОС
# На сервере: включить compression, если нужна
Enable-MMAgent -mc
Restart-Service SysMain
# Но обычно на сервере лучше просто купить ещё памяти
В виртуальных машинах (Hyper-V, VMware)
⚠️ Важно: Если гостевая ОС (Windows) выполняет compression одновременно с тем, как гипервизор выполняет свой memory management (например, memory ballooning в Hyper-V), это может привести к конфликтам и деградации производительности.
Рекомендуемый подход:
- Гостевой Windows: отключи compression
- Гипервизор будет управлять памятью сам (через dynamic memory, memory compression на уровне гипервизора)
Или наоборот: гостевой compression включена, гипервизор не трогает динамическую память. Но не комбинируй оба.
Типичные проблемы и диагностика
Проблема: "Постоянно высокий CPU (System and Compressed Memory)"
Диагностика:
# Проверь, не отключена ли sysmain
Get-Service SysMain # Должна быть Running
# Проверь, сколько памяти на самом деле сжато
Get-MMAgent # MemoryCompression должна быть True
Причины:
- Конфликт с драйверами (особенно сетевые адаптеры, хранилище) — обновите или переустановите
- Старая версия Windows (до 20H2) — обновитесь, в 20H2 и позже это чинилось
- Очень мало памяти, постоянная компрессия — compression работает без остановки
- Багованное приложение (например, Microsoft.Photos в Windows 10) — закройте приложение
Решение:
# Временно отключить
Disable-MMAgent -mc
Restart-Service SysMain
# Перезагрузиться и понаблюдать 15 минут в Task Manager
# Если CPU упал -> compression была виновата, нужны драйверы/обновления
# Если CPU остался высоким -> причина в чём-то другом
Проблема: "Компрессия не срабатывает, хотя включена"
Условия для активации compression:
- Pagefile должен быть включен (минимум 16 МБ на системном диске)
- Сервис SysMain должен быть Running
- Должна быть память для сжатия (иными словами, недостаток памяти или низкоприоритетные процессы)
# Проверить pagefile
Get-WmiObject Win32_PageFileUsage
# Если пусто -> pagefile отключен, включи его:
# Правая кнопка System -> Advanced system settings -> Performance -> Advanced -> Virtual memory
Проблема: "Сжатая память видна в Task Manager, но огромная"
Это нормально. Если видишь "In use (Compressed) = 2 GB", это может значить:
- 2 ГБ физической памяти сейчас занято сжатыми данными
- Но эти 2 ГБ в несжатом виде занимали бы, например, 6 ГБ
- Ratio сжатия: 6/2 = 3x (неплохо!)
Это не проблема, это именно то, что должно быть.
Бенчмарк: реальные цифры
Здесь compression вредит, потому что CPU загружен 100% и не справляется с компрессией + игрой одновременно.
Интеграция с уровнем гипервизора
Если ты запускаешь VMs (Hyper-V, KVM, VMware), учти:
Hyper-V:
- Имеет собственный Smart Paging (не совместим с guest compression)
- Рекомендуется: либо guest compression ON и static memory, либо dynamic memory и guest compression OFF
VMware:
- Использует Memory Ballooning и сам Memory Compression на уровне ESXi
- Guest compression может **конфликтовать** — тестируй в твоем окружении
KVM + Proxmox:
- Контролируйте memory balloon на госте, compression less problematic
- Но всё равно лучше тестировать перед production
Чек-лист перед внедрением
Перед тем, как менять настройку на боевой системе:
1. ✅ Узнай текущий статус: `Get-MMAgent`
2. ✅ Если это VM — свяжись с гипервизором admins, обсудите совместимость
3. ✅ Если критичная система — включи compression **на тестовой копии** на 2–3 дня
4. ✅ Мониторь: CPU, Memory, Disk I/O в Task Manager / Performance Monitor
5. ✅ Если видишь улучшение → закатывай на production
6. ✅ Если видишь деградацию → откатывай: `Disable-MMAgent -mc` + перезагрузка
7. ✅ Задокументируй решение (для следующего администратора)
Memory Compression — это не магия, а просто разумный компромисс между CPU и I/O. Она помогает в низкомеморных окружениях, но бесполезна (или вредна) на системах с избытком памяти.
Практический совет: Если у тебя Windows 11 с 8 ГБ ОЗУ — оставь включенной (это default). Если 16+ ГБ — можешь не переживать, включена или отключена. Если видишь проблемы с CPU — отключи, посмотри результат.
На серверах — обычно не трогай, купи память.
Следи за своим T.E.X.H.O каналом, чтобы не пропустить дальнейшие разборы оптимизации Windows, Linux и сетевых трюков!
Если этот материал помог — подпишись и оставь лайк.
Частые вопросы:
| Вопрос | Ответ |
|--------|-------|
| Может ли compression испортить данные? | Нет, это стандартная функция Windows с 2015 года, данные безопасны. Используется LZ77 — проверенный алгоритм. |
| Нужно ли перезагружаться после Enable/Disable? | Да, для SysMain: `Restart-Service SysMain` или полная перезагрузка. |
| Можно ли включить compression только для конкретного приложения? | Нет, это глобальная ОС-level настройка. Включена для всех или для никого. |
| Какой максимум сжатия памяти я могу ожидать? | 2–5x в лучшем случае (много текста/структур), но реальные значения — 1.2–2x. |
| Что будет, если отключу pagefile полностью? | Compression не будет работать (требует минимум pagefile). Система может вообще упасть при нехватке памяти. |
| Compression работает на Windows Server 2022? | Да, но отключена по умолчанию. Включается той же командой: `Enable-MMAgent -mc`. |
| Может ли compression вызвать data loss? | Нет, это in-memory операция. При перезагрузке всё очищается нормально. |
#Windows11 #MemoryCompression #ОптимизацияОС #Администратор #SystemAdmin #DevOps #Windows #ПроизводительностьПК #LZ77 #XPRESS #Оптимизация #RAM #ОперативнаяПамять #PageFile #SysMain #ПрофессиональнаяНастройка #Диагностика #Тюнинг #Linux #OpenSource #ТехническаяСтатья #T.E.X.H.O #РазборTech #КакЭтоРаботает #ПоДеталям #ТехБудни #Windows11Pro #Сетевик #Разработчик #ТехническаяРубрика