Skip to content

WindowsでVmmemプロセスによるメモリ使用を停止する方法

問題の概要

Windows 10/11でDockerを使用している際、vmmemプロセスが大量のメモリ(場合によっては12GB以上)を使用し続ける問題が発生することがあります。この問題はDockerコンテナやイメージを停止・削除しても解決しない場合があり、システムリソースの逼迫につながります。

vmmemプロセスはWindows Subsystem for Linux(WSL2)およびDocker Desktopの仮想マシン管理に関連しており、適切にシャットダウンされないとメモリを解放しないことがあります。

効果的な解決策

方法1: WSLの完全シャットダウン(推奨)

最も簡単かつ効果的な方法は、WSLを完全にシャットダウンすることです。

powershell
# PowerShellまたはコマンドプロンプトで実行
wsl --shutdown

このコマンドはすべてのWSLディストリビューションと関連リソースを停止し、vmmemプロセスによるメモリ使用を解放します。

方法2: 特定のWSLディストリビューションの停止

特定のディストリビューションのみを停止したい場合:

powershell
# 実行中のWSLディストリビューションを一覧表示
wsl --list --verbose

# 特定のディストリビューションを停止
wsl -t Ubuntu-22.04
# またはDocker Desktop用
wsl -t docker-desktop

方法3: サービス経由での停止

cmd
# wslservice.exeを強制終了
taskkill /F /IM wslservice.exe
powershell
# LxssManagerサービスを再起動(管理者権限が必要)
Restart-Service LxssManager

方法4: Docker Desktopの設定調整

  1. 自動起動の無効化: Docker Desktop設定で「ログイン時に起動」を無効化
  2. 自動更新の無効化: 設定 → Software updates → 「自動的に更新を確認」のチェックを外す

永続的な対策

WSLメモリ制限の設定

%UserProfile%\.wslconfigファイルを作成し、メモリ使用量に制限を設定します:

ini
[wsl2]
memory=4GB        # WSL2が使用する最大メモリ量
processors=4       # 割り当てるCPUコア数
swap=1GB           # スワップファイルサイズ
localhostForwarding=true

設定後、WSLを再起動することで適用されます。

INFO

デフォルトではWSL2は使用可能メモリの50%または8GBのいずれか少ない方が割り当てられます

トラブルシューティング

ハイパーバイザーサービス関連の問題

場合によっては、Hyper-V関連サービスが原因でvmmemが残存することがあります:

  1. サービス管理(services.msc)を開く
  2. 「Hyper-V Host Compute Service」を探す
  3. サービスを停止し、スタートアップタイプを「手動」に変更

Docker Desktopの再インストール

問題が解決しない場合、Docker Desktopの再インストールが有効な場合があります:

  1. Docker Desktopをアンインストール
  2. すべてのWSLディストリビューションを削除
  3. システムを再起動
  4. 最新版のDocker Desktopを再インストール

注意

Docker Desktop 4.29以降ではこの問題の修正が含まれています。最新版を使用していることを確認してください。

予防策

  • Docker使用後は必ず wsl --shutdown を実行する習慣をつける
  • 必要な時だけDocker Desktopを起動する
  • 定期的にWSLディストリビューションのクリーンアップを行う
  • ディスクバックアップソフトウェアがWSLファイルを復元しないように設定する

まとめ

vmmemプロセスのメモリ使用問題は、主にWSL2の適切なシャットダウンが行われないことに起因しています。wsl --shutdownコマンドの実行や.wslconfigファイルによるリソース制限設定が効果的です。また、Docker Desktopの最新版への更新と不要時の停止を心がけることで、この問題を予防できます。