WSL | Ridurre l'uso di CPU e RAM del processo vmmemWSL
Come ridurre CPU e RAM occupate da vmmemWSL, la VM di WSL2 su Windows, da wsl --shutdown ai limiti in .wslconfig fino ad autoMemoryReclaim per restituire la memoria.
Il processo vmmemWSL che vedi nel Task Manager occupare CPU e RAM è il contenitore della macchina virtuale di WSL2 (Windows Subsystem for Linux). Non è vmmemWSL a “impazzire”: rispecchia semplicemente quanto stanno lavorando i processi Linux in esecuzione dentro WSL. Se un dev server, un container Docker o un watcher di file restano attivi in background, li vedi riflessi lì come CPU e memoria occupate.
Soluzione rapida: riavviare WSL
Il modo più veloce per liberare subito tutto è spegnere WSL da PowerShell:
wsl --shutdown
Chiude tutte le distribuzioni e la VM, azzerando CPU e RAM di vmmemWSL. Alla riapertura la distro riparte pulita.
Capire cosa sta consumando la CPU
Se la CPU resta alta, il colpevole è un processo Linux. Dentro la distro:
top # oppure: htop, piu' leggibile
Guarda la colonna %CPU: spesso è un server Node, uno script Python, un container Docker o un watcher (vite, webpack, nodemon) rimasto attivo dopo aver chiuso il terminale. Individuato il processo, lo chiudi con:
kill -9 <PID>
Mettere un tetto a CPU e RAM: .wslconfig
Per impedire a WSL di prendere tutte le risorse, crea o modifica il file C:\Users\<utente>\.wslconfig:
[wsl2]
memory=4GB
processors=2
swap=2GB
memory→ RAM massima concessa alla VMprocessors→ numero massimo di core CPUswap→ dimensione dello swap
Se avevi già altre voci (ad esempio nestedVirtualization=true), lasciale e aggiungi le nuove sotto [wsl2]. Applica le modifiche con wsl --shutdown: al riavvio i limiti sono attivi. Ridurre i processors è la voce che più aiuta contro la CPU alta.
Restituire la RAM a Windows automaticamente
WSL2 tende a non restituire subito la memoria liberata: per questo vmmemWSL resta a 2-3 GB anche quando Linux non la usa più. Le versioni recenti risolvono con un’opzione dedicata, sempre nel .wslconfig:
[experimental]
autoMemoryReclaim=gradual
sparseVhd=true
autoMemoryReclaim recupera la memoria inutilizzata (gradual la rilascia poco alla volta, dropcache subito), mentre sparseVhd evita che il disco virtuale della distro si gonfi nel tempo. Anche qui, applica con wsl --shutdown.
Nota su Docker Desktop
Docker Desktop dipende da WSL: dopo wsl --shutdown lo vedrai riavviare la VM da solo, perché ne ha bisogno per i container. Se vuoi fermare davvero tutto, chiudi prima Docker Desktop, poi lancia lo shutdown. Per controllare e fermare i container attivi:
docker ps
docker stop $(docker ps -q)