Pourquoi Vmmem engloutit votre RAM et ce que .wslconfig contrôle
Le noyau Linux ne rend pas volontiers la mémoire libérée : il la garde en cache de pages, si bien qu'après une grosse compilation Vmmem reste haut un moment alors que tout est fermé dans la distribution. Ce n'est pas une fuite mais un comportement normal du noyau ; quand vos distributions cohabitent pourtant avec le navigateur, l'IDE et d'autres machines virtuelles, autant fixer le plafond par écrit. Les 50% par défaut se défendaient à l'époque des machines vides ; aujourd'hui, où cinq applications gourmandes se partagent 16 Go, c'est trop.
Le volant, c'est %UserProfile%\.wslconfig, lu une seule fois au démarrage de la machine virtuelle : chaque modification doit donc être suivie d'un wsl --shutdown. Les limites s'appliquent d'un coup à toutes les distributions — impossible de fixer un plafond distinct pour chacune avec ce fichier. Et il n'agit que sur WSL2 : la première génération traduit les appels Linux au sein de Windows et n'a aucune machine virtuelle à brider.
- memory=6GB — le plafond de RAM pour toute la machine virtuelle, toutes les distributions ensemble
- processors=4 — le nombre de cœurs logiques que WSL2 verra
- swap=4GB — la taille du fichier d'échange Linux (par défaut : 25% de la RAM, 8 Go maximum)
- autoMemoryReclaim=gradual — option expérimentale qui rend à Windows la mémoire libérée (WSL 1.3.10+)
- sparseVhd=true — option expérimentale qui permet à ext4.vhdx de rétrécir quand des fichiers sont supprimés
Fixer les limites pas à pas
Ouvrez le Bloc-notes, collez l'en-tête de section [wsl2], puis en dessous les lignes memory=6GB, processors=4 et swap=4GB, et enregistrez le tout sous %UserProfile%\.wslconfig. Dans la boîte d'enregistrement, choisissez Type : Tous les fichiers (*.*) et encodage UTF-8, sinon Windows crée en silence un .wslconfig.txt que WSL ne lira jamais. Une valeur sans unité — memory=6 par exemple — se lit en octets : le suffixe GB n'est pas une décoration, c'est une obligation.
Ouvrez PowerShell ou Windows Terminal, lancez wsl --shutdown, patientez une dizaine de secondes, puis rouvrez votre distribution. Dans Linux, free -h affiche désormais la quantité plafonnée au lieu de toute la RAM physique, et nproc compte les cœurs autorisés. Si wsl --version indique 1.3.10 ou plus, vous pouvez ajouter sous le bloc [wsl2] une section [experimental] avec autoMemoryReclaim=gradual et sparseVhd=true, puis relancer l'arrêt ; sur les versions plus anciennes, commencez par wsl --update dans une console d'administrateur.
Quand revoir les chiffres
Observez Vmmem dans le Gestionnaire des tâches pendant une semaine d'usage normal : pour la navigation, un éditeur et des conteneurs légers, 4 à 6 Go suffisent, tandis que les grosses builds Docker ou les grands projets JavaScript peuvent honnêtement réclamer les 8 Go. Ajustez memory= par paliers de 2 Go et laissez au moins la moitié de la RAM physique à Windows sur les machines à 16 Go ou moins. Si le disque des distributions ne cesse de gonfler, sparseVhd=true met fin à la croissance continue de ext4.vhdx. Un coup d'œil après chaque mise à jour de fonctionnalités de Windows s'impose : elles remplacent parfois le paquet WSL et en changent le comportement.
Questions et réponses
Quelle quantité de mémoire donner à WSL2 ?
Sur une machine à 16 Go, 6 Go couvrent le développement quotidien ; avec 8 Go de RAM au total, restez à 4 Go pour que Windows ne parte pas dans le fichier d'échange. N'augmentez le plafond que par petits paliers, et seulement si des builds échouent réellement faute de mémoire.
Pourquoi Vmmem reste-t-il élevé alors que tout est fermé dans Linux ?
Le noyau garde la mémoire libérée en cache de pages et ne la restitue pas à Windows de lui-même. Lancez wsl --shutdown en fin de journée, ou activez autoMemoryReclaim=gradual à partir de WSL 1.3.10 pour que la mémoire reflue d'elle-même.
Est-ce que .wslconfig fonctionne avec WSL1 ?
Non. WSL1 traduit les appels Linux directement dans Windows : il n'y a ni machine virtuelle, ni Vmmem, ni quoi que ce soit à limiter. Pour des limites, convertissez d'abord la distribution avec wsl --set-version <nom> 2.
Vérifiez le contenu avant l'achat.
L'essai unique de 30 minutes couvre les fonctions de base. Les fonctions marquées PRO restent verrouillées jusqu'à l'activation d'une licence payante.
À lire ensuite
Écrivez-nous: [email protected]