Dlaczego Vmmem zjada RAM i czym steruje .wslconfig
WSL2 trzyma zwolnioną pamięć Linuksa jako cache stron zamiast oddawać ją Windows — dlatego Vmmem pozostaje gigantem po dużej kompilacji, nawet gdy w dystrybucji nie działa już żaden program. To normalne zachowanie jądra, nie wyciek, ale gdy dystrybucje dzielą maszynę z przeglądarką, IDE i innymi maszynami wirtualnymi, limit powinien być na piśmie. Domyślne 50% miało sens, gdy maszyny świeciły pustkami; na komputerze z 16 GB dzielonym przez pięć łakomych aplikacji to po prostu za dużo.
Kierownica to %UserProfile%\.wslconfig, czytany raz przy starcie maszyny — każda edycja wymaga więc wsl --shutdown, żeby wejść w życie. Limity dotyczą wszystkich dystrybucji naraz; osobnego limitu per dystrybucja ten plik nie przewiduje. Działa wyłącznie na WSL2: pierwsza generacja wykonuje wywołania Linuksa w samym Windows, bez maszyny wirtualnej i bez Vmmem, więc nie ma czego ograniczać.
- memory=6GB — sufit RAM dla całej maszyny, wszystkich dystrybucji razem
- processors=4 — ile logicznych rdzeni CPU WSL2 może zobaczyć
- swap=4GB — rozmiar pliku swap Linuksa, do którego WSL2 może się schronić (domyślnie 25% RAM, maks. 8 GB)
- autoMemoryReclaim=gradual — eksperymentalna opcja oddająca zwolnioną pamięć Linuksa Windows (WSL 1.3.10+)
- sparseVhd=true — eksperymentalna opcja pozwalająca dyskowi ext4.vhdx kurczyć się po usunięciu plików
Ustawianie limitów krok po kroku
Otwórz Notatnik, wklej nagłówek sekcji [wsl2], a pod nim linie memory=6GB, processors=4 i swap=4GB, po czym zapisz plik jako %UserProfile%\.wslconfig. W oknie zapisu ustaw typ „Wszystkie pliki (*.*)” i kodowanie UTF-8, bo inaczej Windows po cichu utworzy .wslconfig.txt, którego WSL nigdy nie przeczyta. Wartość bez jednostki, na przykład memory=6, jest interpretowana jako bajty — sufiks GB to nie ozdoba, tylko wymóg.
Otwórz PowerShell albo Windows Terminal i wykonaj wsl --shutdown, odczekaj jakieś dziesięć sekund, po czym uruchom dystrybucję ponownie. Wewnątrz Linuksa free -h pokaże teraz ograniczony rozmiar zamiast pełnego fizycznego RAM-u, a nproc wypisze liczbę dozwolonych rdzeni. Jeśli wsl --version zgłasza 1.3.10 lub nowsze, możesz pod blokiem [wsl2] dodać sekcję [experimental] z autoMemoryReclaim=gradual i sparseVhd=true i powtórzyć zamykanie; na starszym WSL najpierw uruchom wsl --update z podwyższonego wiersza poleceń.
Kiedy wrócić do liczb
Obserwuj Vmmem w Menedżerze zadań przez tydzień normalnej pracy: do przeglądania sieci, edycji tekstu i lekkich kontenerów wystarczy 4–6 GB, ciężkie buildy Dockera czy duże toolchainy JavaScriptu mogą uczciwie potrzebować 8 GB i więcej. Zmieniaj memory= krokami po 2 GB zamiast jednym skokiem, a na maszynach z 16 GB lub mniej zostaw Windows przynajmniej połowę fizycznej pamięci. Jeśli dysk z dystrybucjami nie przestaje rosnąć, sparseVhd=true powstrzymuje ext4.vhdx przed dalszym rozlewaniem. Sprawdzaj wszystko po każdej dużej aktualizacji Windows — potrafią podmienić pakiet WSL i zmienić jego zachowanie.
Pytania i odpowiedzi
Ile pamięci dać WSL2?
Na maszynie z 16 GB codzienne programowanie spokojnie mieści się w 6 GB z zapasem; przy 8 GB RAM-u zostań przy 4 GB, żeby Windows nie zaczął swapować. Podnoś limit małymi krokami i tylko wtedy, gdy buildy faktycznie kończą się błędami braku pamięci.
Dlaczego Vmmem wciąż jest ogromny, choć zamknąłem wszystko w Linuksie?
Jądro trzyma zwolnioną pamięć jako cache stron i nie oddaje jej Windows z własnej inicjatywy. Uruchamiaj wsl --shutdown po zakończeniu dnia albo włącz autoMemoryReclaim=gradual na WSL 1.3.10+, a nieużywana pamięć będzie wracać automatycznie.
Czy .wslconfig działa też z dystrybucjami WSL1?
Nie. WSL1 tłumaczy wywołania Linuksa w samym Windows — nie ma maszyny, Vmmem ani czego ograniczać. Jeśli chcesz limitów, najpierw przekonwertuj dystrybucję poleceniem wsl --set-version <name> 2.
Sprawdź warunki przed zakupem
Porównaj czas licencji i liczbę urządzeń. Każdy płatny plan odblokowuje ten sam zestaw narzędzi PRO.
Przeczytaj także
Napisz do nas: [email protected]