База знаний →5 мин чтенияОбновлено: 2026-09-21

Как ограничить потребление памяти и CPU в WSL2 на Windows 11

WSL2 запускает Linux не рядом с Windows, а внутри лёгкой виртуальной машины, и в Диспетчере задач она видна как процесс Vmmem: на актуальных сборках Windows 11 ей по умолчанию отдаётся до 50% оперативной памяти (на старых — до 80%) и половина логических ядер. Освободившуюся память Linux не спешит возвращать, поэтому Vmmem подолгу держит высокие значения даже после закрытия всех программ внутри дистрибутива. Управляется всё текстовым файлом .wslconfig в папке профиля: пара строк вида memory=6GB и processors=4 урезает аппетиты машины, а применяется изменение одной командой wsl --shutdown.

Почему Vmmem съедает память и что умеет .wslconfig

Ядро Linux держит освободившуюся память под страничный кэш и само Windows её не отдаёт — поэтому после большой сборки Vmmem подолгу висит на высоком значении, хотя внутри дистрибутива уже всё закрыто. Это не утечка, а нормальное поведение ядра; но когда дистрибутивы делят машину с браузером, IDE и другими виртуалками, потолок лучше задать явно. Дефолтные 50% были разумны, когда машины были пустыми; сегодня, когда 16 ГБ делят пять прожорливых приложений, это много.

Рулевое колесо — файл %UserProfile%\.wslconfig, который читается один раз при старте виртуальной машины, поэтому после любых правок её нужно перезапускать командой wsl --shutdown. Лимиты действуют сразу на все дистрибутивы — персональный потолок для каждого в этом файле задать нельзя. Работает он только для WSL2: первое поколение выполняет вызовы Linux прямо внутри Windows, там нет ни виртуальной машины, ни Vmmem.

  • memory=6GB — потолок оперативной памяти для всей виртуальной машины, всех дистрибутивов сразу
  • processors=4 — сколько логических ядер процессора увидит WSL2
  • swap=4GB — размер файла подкачки Linux (по умолчанию 25% от RAM, максимум 8 ГБ)
  • autoMemoryReclaim=gradual — экспериментальная опция, возвращающая освободившуюся память Windows (WSL 1.3.10+)
  • sparseVhd=true — экспериментальная опция, позволяющая диску ext4.vhdx сжиматься при удалении файлов

Задаём лимиты по шагам

Откройте Блокнот, вставьте заголовок секции [wsl2], а под ним строки memory=6GB, processors=4 и swap=4GB, затем сохраните файл как %UserProfile%\.wslconfig. В диалоге сохранения выберите тип «Все файлы (*.*)» и кодировку UTF-8, иначе Windows молча создаст .wslconfig.txt, который WSL читать не станет. Значение без единицы измерения — например, memory=6 — трактуется как байты, так что суффикс GB не украшение, а необходимость.

Откройте PowerShell или Windows Terminal и выполните wsl --shutdown, подождите секунд десять и запустите дистрибутив заново. Внутри Linux команда free -h покажет уже урезанный объём памяти вместо всей физической, а nproc — разрешённое число ядер. Если wsl --version выдаёт 1.3.10 или новее, ниже секции [wsl2] можно добавить блок [experimental] с autoMemoryReclaim=gradual и sparseVhd=true и снова перезапустить WSL; на старых версиях сначала обновитесь командой wsl --update от имени администратора.

Когда пересматривать цифры

Понаблюдайте за Vmmem в Диспетчере задач неделю обычной работы: для браузера, редактора и лёгких контейнеров хватает 4–6 ГБ, а тяжёлые сборки Docker или крупные JavaScript-проекты могут честно требовать все 8. Меняйте memory= шагами по 2 ГБ, а не разом, и на машинах с 16 ГБ и меньше оставляйте Windows хотя бы половину физической памяти. Если диск с дистрибутивами всё время растёт, включите sparseVhd=true — ext4.vhdx перестанет только набирать вес. Заглядывайте в настройки после каждого крупного обновления Windows: оно иногда заменяет пакет WSL и меняет его поведение.

Вопросы и ответы

Сколько памяти выделить WSL2?

На машине с 16 ГБ для повседневной разработки хватает 6 ГБ; при 8 ГБ общей памяти держитесь 4 ГБ, чтобы Windows не уходила в подкачку. Поднимайте потолок маленькими шагами и только когда сборки реально падают по нехватке памяти.

Почему Vmmem не уменьшается, если внутри Linux всё закрыто?

Ядро держит освободившуюся память в страничном кэше и само по себе Windows её не отдаёт. Выполняйте wsl --shutdown после работы или включите autoMemoryReclaim=gradual в WSL 1.3.10+, чтобы память стекала обратно автоматически.

Работает ли .wslconfig с WSL1?

Нет: WSL1 выполняет вызовы Linux прямо внутри Windows — там нет ни виртуальной машины, ни Vmmem, ни чего ограничивать. Если нужны лимиты, сначала переведите дистрибутив командой wsl --set-version <имя> 2.

Понятно до покупки: что входит в лицензию

Разовый 30-минутный триал даёт доступ к базовым инструментам. Возможности с меткой PRO остаются закрыты до активации платной лицензии.

Читайте также

Все статьи · Вопросы

Написать нам: [email protected]