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 VM
  • processors → numero massimo di core CPU
  • swap → 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)