Чому 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]