WindowsでVmmemプロセスによるメモリ使用を停止する方法
問題の概要
Windows 10/11でDockerを使用している際、vmmem
プロセスが大量のメモリ(場合によっては12GB以上)を使用し続ける問題が発生することがあります。この問題はDockerコンテナやイメージを停止・削除しても解決しない場合があり、システムリソースの逼迫につながります。
vmmem
プロセスはWindows Subsystem for Linux(WSL2)およびDocker Desktopの仮想マシン管理に関連しており、適切にシャットダウンされないとメモリを解放しないことがあります。
効果的な解決策
方法1: WSLの完全シャットダウン(推奨)
最も簡単かつ効果的な方法は、WSLを完全にシャットダウンすることです。
# PowerShellまたはコマンドプロンプトで実行
wsl --shutdown
このコマンドはすべてのWSLディストリビューションと関連リソースを停止し、vmmem
プロセスによるメモリ使用を解放します。
方法2: 特定のWSLディストリビューションの停止
特定のディストリビューションのみを停止したい場合:
# 実行中のWSLディストリビューションを一覧表示
wsl --list --verbose
# 特定のディストリビューションを停止
wsl -t Ubuntu-22.04
# またはDocker Desktop用
wsl -t docker-desktop
方法3: サービス経由での停止
# wslservice.exeを強制終了
taskkill /F /IM wslservice.exe
# LxssManagerサービスを再起動(管理者権限が必要)
Restart-Service LxssManager
方法4: Docker Desktopの設定調整
- 自動起動の無効化: Docker Desktop設定で「ログイン時に起動」を無効化
- 自動更新の無効化: 設定 → Software updates → 「自動的に更新を確認」のチェックを外す
永続的な対策
WSLメモリ制限の設定
%UserProfile%\.wslconfig
ファイルを作成し、メモリ使用量に制限を設定します:
[wsl2]
memory=4GB # WSL2が使用する最大メモリ量
processors=4 # 割り当てるCPUコア数
swap=1GB # スワップファイルサイズ
localhostForwarding=true
設定後、WSLを再起動することで適用されます。
INFO
デフォルトではWSL2は使用可能メモリの50%または8GBのいずれか少ない方が割り当てられます
トラブルシューティング
ハイパーバイザーサービス関連の問題
場合によっては、Hyper-V関連サービスが原因でvmmem
が残存することがあります:
- サービス管理(services.msc)を開く
- 「Hyper-V Host Compute Service」を探す
- サービスを停止し、スタートアップタイプを「手動」に変更
Docker Desktopの再インストール
問題が解決しない場合、Docker Desktopの再インストールが有効な場合があります:
- Docker Desktopをアンインストール
- すべてのWSLディストリビューションを削除
- システムを再起動
- 最新版のDocker Desktopを再インストール
注意
Docker Desktop 4.29以降ではこの問題の修正が含まれています。最新版を使用していることを確認してください。
予防策
- Docker使用後は必ず
wsl --shutdown
を実行する習慣をつける - 必要な時だけDocker Desktopを起動する
- 定期的にWSLディストリビューションのクリーンアップを行う
- ディスクバックアップソフトウェアがWSLファイルを復元しないように設定する
まとめ
vmmem
プロセスのメモリ使用問題は、主にWSL2の適切なシャットダウンが行われないことに起因しています。wsl --shutdown
コマンドの実行や.wslconfig
ファイルによるリソース制限設定が効果的です。また、Docker Desktopの最新版への更新と不要時の停止を心がけることで、この問題を予防できます。