Perché Vmmem divora la RAM e cosa controlla .wslconfig
WSL2 conserva la memoria liberata da Linux come page cache invece di restituirla a Windows: per questo Vmmem resta enorme dopo una grande build anche se nella distribuzione non gira più nulla. È il comportamento normale del kernel, non un memory leak — ma quando le distribuzioni condividono il PC con un browser, un IDE e altre VM, il tetto va messo per iscritto. Il 50% di default aveva senso su macchine vuote; su un computer da 16 GB condiviso tra cinque applicazioni affamate è semplicemente troppo.
Il volante è %UserProfile%\.wslconfig, letto una volta sola all’avvio della VM — ogni modifica richiede quindi un wsl --shutdown per prendere effetto. I limiti valgono per tutte le distribuzioni in una volta e un tetto per singola distribuzione non è possibile da questo file. Influenza solo WSL2: la prima generazione esegue le chiamate Linux dentro Windows stesso, senza VM e senza Vmmem da limitare.
- memory=6GB — il tetto di RAM per l’intera VM, tutte le distribuzioni insieme
- processors=4 — quanti core CPU logici WSL2 può vedere
- swap=4GB — dimensione del file di swap Linux su cui WSL2 può ripiegare (default: 25% della RAM, massimo 8 GB)
- autoMemoryReclaim=gradual — opzione sperimentale che restituisce a Windows la memoria liberata da Linux (WSL 1.3.10+)
- sparseVhd=true — opzione sperimentale che permette al disco ext4.vhdx di restringersi quando si cancellano file
Impostare i limiti passo per passo
Apri Blocco note, incolla l’intestazione di sezione [wsl2] e sotto le righe memory=6GB, processors=4 e swap=4GB, poi salva il file come %UserProfile%\.wslconfig. Nella finestra di salvataggio imposta «Tutti i file (*.*)» come tipo file e UTF-8 come codifica, altrimenti Windows crea in silenzio un .wslconfig.txt che WSL non leggerà mai. Un valore senza unità, tipo memory=6, viene interpretato in byte: il suffisso GB non è decorazione, è obbligatorio.
Apri PowerShell o Windows Terminal ed esegui wsl --shutdown, attendi una decina di secondi, poi riavvia la distribuzione. Dentro Linux, free -h ora mostra la cifra limitata invece dell’intera RAM fisica e nproc stampa il numero di core concessi. Se wsl --version riporta 1.3.10 o successivo, puoi aggiungere sotto il blocco [wsl2] una sezione [experimental] con autoMemoryReclaim=gradual e sparseVhd=true e ripetere lo shutdown; su WSL più vecchio, prima esegui wsl --update da un prompt elevato.
Quando rivedere i numeri
Tieni d’occhio Vmmem in Gestione attività per una settimana di lavoro normale: per navigare, scrivere e far girare container leggeri 4–6 GB bastano e avanzano, mentre le build pesanti di Docker o i grandi toolchain JavaScript possono richiedere onestamente 8 GB o più. Muovi memory= a passi di 2 GB invece che con un unico salto, e su macchine con 16 GB o meno lascia almeno metà della RAM fisica a Windows. Se il disco che ospita le distribuzioni continua a crescere, sparseVhd=true impedisce a ext4.vhdx di espandersi senza fine. Ricontrolla dopo ogni aggiornamento importante di Windows: ogni tanto sostituiscono il pacchetto WSL e ne cambiano il comportamento.
Domande e risposte
Quanta memoria dare a WSL2?
Su una macchina da 16 GB, 6 GB coprono lo sviluppo quotidiano con margine; con 8 GB di RAM totali resta sui 4 GB per non mandare Windows in swapping. Alza il tetto a piccoli passi, e solo quando le build falliscono davvero per mancanza di memoria.
Perché Vmmem è ancora enorme dopo aver chiuso tutto dentro Linux?
Il kernel tiene la memoria liberata come page cache e non la restituisce a Windows per iniziativa propria. Esegui wsl --shutdown a fine giornata oppure attiva autoMemoryReclaim=gradual su WSL 1.3.10+, così la memoria inutilizzata refluisce automaticamente.
.wslconfig funziona anche con le distribuzioni WSL1?
No. WSL1 traduce le chiamate Linux dentro Windows stesso: niente VM, niente Vmmem e niente da limitare. Se vuoi i limiti, prima converti la distribuzione con wsl --set-version <name> 2.
Scopri cosa include la licenza prima dell'acquisto.
La prova singola di 30 minuti include gli strumenti essenziali. Le funzioni PRO restano bloccate finché non attivi una licenza a pagamento.
Da leggere dopo
Scrivici: [email protected]