VmmemWSLのメモリ使用量を減らす方法|WSL2・Dockerの終了と上限設定でゲーム前のRAMを確認
本記事にはアフィリエイト広告(Amazon・楽天市場等)のリンクが含まれています。
ゲーム前に止めるか、動かしたまま上限を付けるか
wsl --shutdown.wslconfig作業を保存してから停止WSL2やDocker Desktopを使った後にタスクマネージャーを開くと、VmmemWSL(環境によってはVmmem)がRAMを使い続けています。ターミナルは閉じたのに、ゲームを起動する前の空きメモリが思ったより少ない状態です。原因はWSLが手放していないメモリで、止め方と上限の決め方で扱いが変わります。
ゲーム前だけで済むなら、作業を保存してからDocker Desktopを終了し、PowerShellで wsl --shutdown を実行するのが最短です。 WSLを動かしたままゲームもしたい場合は、%UserProfile%\.wslconfig の memory でWSL2の上限を決め、設定を反映してゲーム側とWSL側の両方を見ます。
VmmemWSLが大きいことだけでメモリリークとは判断できません。Linuxはキャッシュとして空きメモリを使うため、実際に動いている処理とキャッシュを分けて見る必要があります。実行中のサーバーやコンテナーは wsl --shutdown で止まるので、停止前の保存が先です。
目次
確認VmmemWSLの正体と、先に調べる3つのこと
VmmemWSLは、WSL2を動かす軽量な仮想マシンがホストのWindowsで使っているメモリを表示する項目です。WSL2の設定(.wslconfig)はこの仮想マシンに対するもので、メモリ量の上限(memory)も設定対象です。VmmemWSLを直接終了する操作ではなく、WSL側を正しく止めるのが基本です。
wsl -l -v を実行します。各ディストリビューションが Running か Stopped か、VERSION が 2 かが分かります。VERSION が 1 のものは仮想マシンではないため、VmmemWSLの対象外です。wsl -l -v
wsl --list --running
wsl --version
この3つはどれも表示だけで、WSLの状態は変わりません。wsl --version が認識されない場合は古い組み込み版のWSLの可能性があり、Microsoft Store 経由の最新版へ更新してください。
VmmemWSLが示すのはメインメモリ(RAM)です。GPUのVRAMはタスクマネージャーのパフォーマンスタブのGPUで見る別の数字なので、混同しません。Windows全体のRAM不足の見分け方は、Windows 11のメモリ使いすぎの記事で扱っています。
停止前WSLで動いている作業を保存してから止める
wsl --shutdown は、実行中のすべてのディストリビューションとWSL2の軽量ユーティリティ仮想マシンを直ちに終了します。猶予なしで止まるため、次の項目を先に片付けます。
- WSL内のエディターやIDEで開いているファイルを保存します。Windows側のVS CodeからWSLに接続している場合も同じです。
- ビルド、学習、ダウンロード、データベースの書き込みなど、途中で止めると困る処理が終わっているか確認します。
- Dockerのコンテナーで動かしているサーバーやデータベースを止めてよいか確認します。保存先をボリュームにしていない場合は、中のデータが失われないか確認します。
- ローカルで動かしているAIツールの生成中の処理や、常駐サービスに他の端末から接続していないかを確認します。
wsl --unregister を実行すると、そのディストリビューションのデータ、設定、ソフトウェアがすべて完全に失われます。仮想ディスク(VHDX)やスワップファイルを手で削除する方法も含め、メモリを減らす目的では使いません。
停止wsl --terminate と wsl --shutdown の範囲の違い
| コマンド | 止まる範囲 | 向いている場面 |
|---|---|---|
wsl --terminate <ディストリビューション名> | 指定した1つのディストリビューションだけ | 他のディストリビューションは動かし続けたいとき |
wsl --shutdown | 実行中のすべてのディストリビューションとWSL2の仮想マシン | ゲーム前にWSL2のメモリをまとめて手放したいとき、.wslconfigの変更を反映するとき |
wsl --terminate Ubuntu
wsl --shutdown
Ubuntu の部分は wsl -l -v で表示された名前に置き換えます。--terminate は指定したディストリビューションだけを止めますが、他のディストリビューションが動いているあいだは仮想マシン自体が残るため、VmmemWSLが消えるとは限りません。全体を手放したいときは --shutdown を使います。
停止後にタスクマネージャーで変化を見る
wsl --shutdown はコマンドが戻った時点で停止の指示が終わっています。wsl --list --running で「実行中のディストリビューションがありません」と出ることを確認し、タスクマネージャーでVmmemWSLの行が消えたか、メモリが小さくなったかを見ます。なお、すべてのシェルを閉じて自然に停止するのを待つ場合は、停止まで約8秒かかる目安です。
再発停止してもVmmemWSLが戻ってくるとき
止めた直後にVmmemWSLが再び現れる場合は、何かがWSLを起動し直しています。次の順で確認します。
- Docker Desktopが起動していないか。Dockerは自分の docker-desktop ディストリビューションでWSL2を使うので、Docker Desktopを終了してから
wsl --shutdownを実行します。 - スタートアップに登録された開発ツールや常駐ソフトが、WSLのコマンドを呼んでいないか。
- VS CodeなどのエディターがWSL内のフォルダーを開いたままになっていないか。
どのアプリが起動したかを特定できないときは、アプリを1つずつ閉じて wsl --list --running を確認し、変化があった時点で原因を絞ります。ディストリビューションを削除して様子を見るのは、データを失うだけで切り分けになりません。
上限.wslconfig でWSL2のメモリ上限を決める
WSLを動かしたままゲームもするなら、.wslconfig で仮想マシンのメモリ上限を決めます。memory の既定値はWindowsの合計メモリの50%です。32GBのPCなら上限は約16GBまで膨らむ余地があり、ゲームと同時に使うと競合しやすくなります。
| 項目 | 内容 | 注意点 |
|---|---|---|
| 場所 | %UserProfile%\.wslconfig(例 C:\Users\ユーザー名\.wslconfig) | 既定では存在しないため、自分で作成する |
| 適用範囲 | WSL2で動くすべてのディストリビューション | WSL1のディストリビューションには効かない。1つだけに限定する設定ではない |
| 反映のタイミング | WSLの仮想マシンが起動し直したとき | 保存だけでは変わらない。作業を保存して wsl --shutdown が必要 |
| 書式 | [wsl2] の下に memory=数値GB | 単位を付ける。付けないとバイト扱い |
既存の設定を控えてから書き足す
すでに .wslconfig がある場合は、書き換える前にコピーを保存します。ファイル名の先頭のドットと拡張子なしの形が重要で、メモ帳で保存するときは「ファイルの種類」を「すべてのファイル」にしないと .txt が付いてしまいます。エクスプローラーで拡張子を表示すると確認しやすくなります。手で編集する代わりに、スタートメニューの「WSL Settings」から設定する方法もあります。
notepad $env:USERPROFILE\.wslconfig
書式は次のとおりです。8GB は書式を示す例であり、おすすめの値ではありません。
[wsl2]
memory=8GB
上限の決め方は、WSL側とゲーム側の両方から逆算します。
- WSLで普段の作業をしているときのVmmemWSLの最大値を、タスクマネージャーで数日分控える。
- 遊ぶゲームの必要メモリ(推奨スペック表のRAM)と、ゲーム中のWindows全体の使用量を確認する。16GBと32GBの違いはゲーミングPCのメモリ容量の記事が参考になります。
- PCの搭載RAMから、ゲームとWindowsに必要な分を引いた残りがWSLに回せる量。その範囲でWSLの作業が収まるかを見る。
上限を下げすぎると、WSL内でメモリ不足になり、処理やコンテナーが強制終了される場合があります。数値は一度で決めず、WSLの作業が普段どおり終わるかを見ながら調整します。Windows側のコミット上限の不足は別の診断になるため、メモリが足りているのにエラーが出る場合はコミット済みメモリの記事を先に確認してください。
回収autoMemoryReclaim は現在の既定値を確認してから設定する
WSLの autoMemoryReclaim を有効にすると、Windows側が仮想マシンの未使用メモリを取り戻せるようになり、Linuxカーネルのページキャッシュが大量のRAMを保持し続けるのを防げます。イメージのビルド後にほかのアプリへメモリを回したい場面向けの設定です。
[experimental] セクションに書き、値は次の3つです。
| 値 | 動作 | 向いている人 |
|---|---|---|
| disabled | 自動のメモリ回収を行わない | 回収で作業に影響が出たとき |
| gradual | キャッシュされたメモリをゆっくり自動で回収する | 作業中のキャッシュを急に手放したくない人 |
| dropCache | キャッシュされたメモリをすぐ回収する | ビルド後などにRAMを早く返したい人 |
[experimental]
autoMemoryReclaim=gradual
古い解説には「既定では無効」と書かれたものがありますが、2026年10月時点のMicrosoftの資料では既定値が dropCache です。設定を足す前に、wsl --version でWSLのバージョンを確かめ、wsl --update で更新できるか見ます。何も書かない場合の挙動が資料どおりかを確かめてから、必要な値だけを書き足してください。この機能はWSL 1.3.10のリリースで実験的な機能として登場し、現在も「試験的な設定」の扱いです。
確認ゲーム側とWSL側の両方で効果を見て、悪化したら戻す
- WSLの作業を保存し、.wslconfig を保存して
wsl --shutdownを実行します。 wsl --list --runningで停止を確認してから、WSLを起動し直します。- WSLで普段の作業をして、VmmemWSLの最大値が設定した上限内に収まるか、処理が途中で落ちないかを確認します。
- ゲームを起動し、タスクマネージャーのパフォーマンスタブのメモリで、使用中とコミット済みに余裕があるか、カクつきやクラッシュが出ないかを見ます。
効果は、削減できたRAMの量やfpsの変化として一律には言えません。PCの搭載メモリ、WSLの使い方、ゲームごとに変わります。どちらか一方でも悪化したら、次の順で戻します。
- 追加した行を消すか、控えておいた元の .wslconfig に戻す。
- 作業を保存して
wsl --shutdownを実行し、WSLを起動し直す。 - 上限を上げる、または autoMemoryReclaim を disabled にするなど、1項目ずつ変えて様子を見る。
Windowsのゲーム全般の設定はWindows 11ゲーム高速化の記事にまとめています。
FAQVmmemWSLのよくある疑問
wsl --shutdown を使います。wsl --shutdown でWindowsのデータは消えますか?まとめ保存して止めるか、上限を決めて共存させる
ゲーム前だけVmmemWSLのRAMを手放したいなら、作業を保存し、Docker Desktopを終了して wsl --shutdown を実行します。WSLを動かし続ける人は、.wslconfig の memory で上限を決め、WSL側とゲーム側の両方で確認し、悪化したら元の設定に戻します。ディストリビューションの削除や仮想ディスクの手動削除は使いません。
出典:Microsoft Learn Advanced settings configuration in WSL / Microsoft Learn WSLでの詳細設定の構成 / Microsoft Learn WSLの基本的なコマンド / Docker Docs WSL 2 backend on Windows / Docker Docs Settings / GitHub microsoft/WSL 1.3.10リリース

