📈

WSL2の「Vmmem」メモリ大量消費の暫定対応手段

2023/03/07に公開

状況

「VmmemWSL」プロセスがメモリを大量に使っている。
特に、WSLで作業していないのにメモリ大量に使われている。

VmmemWSLは何している?

WSL2はLinuxが仮想メモリを使った場合、メモリに空きがあればメモリ内に展開します。
そのメモリ内展開を「VmmemWSL」が行っており、たくさんのメモリを使うようです。
そして、Linuxは仮想メモリを積極的には消さないため、メモリを使い続けます。

原因はわからないが

そもそもの原因は、WSL2のLinuxがメモリを大量消費したことにあるのです。
なぜLinuxが大量に(仮想)メモリを使うのかはわからないです。。。が、この問題でググるとDocker DeskTopを使っている人多すぎる。
やめたら、改善したという人もいるし、怪しすぎる。。。

関連issue
https://github.com/microsoft/WSL/issues/8725

暫定対応法

メモリをフラッシュ

ターミナルを立ち上げて、wslに入り、

powershell
# WSLに入るコマンド。すでにWSLに入っている場合は不要
wsl

# メモリをフラッシュするコマンド
sudo sh -c "/usr/bin/echo 3 > /proc/sys/vm/drop_caches"

実行例

Linuxを複数使っている人はこの際に、Linux毎にコマンドを流した方が良いでしょう。

だいぶ落ち着きましたメモリ消費がだいぶ落ち着きました

メモリ使用量制限

自分は試していないですが、WSLが使用するメモリ量を制限する方法もあります。

https://helog.jp/windows/vmmem-memory/

おまけ

現在開発中のWSLでは、WSLのメモリサイズスワップサイズ をGUIから指定いできるようになります。
また、 メモリの自動縮退機能 が正式版になります。
アイドルが5分以上続いた場合、WSLの使用メモリが自動的に縮退を行うようです。
この機能で、この問題が解決してほしいです。。。

https://www.publickey1.jp/blog/24/windows_subsystem_for_linuxwslgui.html

Discussion