Почему 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]