Docker for Windowsをupdateしたらメモリを食い潰すようになってしまったので

docker
最近やたら動作が重くなることがあるなあと思ってプロセスをチェックしてみたら、Docker for Windowsが使用していると思われる「Vmmem」というアプリがメモリを最大限まで使っていて激重状態に。ほとんど動いていないコンテナが2個だけ起動しているDockerにおいて、64GB積んでるメモリが食い潰されるなんてまったく想定していなかったのでちょっと慌てました。なんでそうなる?



Docker for Windowsではよくあることらしいです

解決方法としてはDockerのメモリ使用量に対して上限を設けると良いようです。上限は設定の「Resources > Advanced」で出来るらしいんですが、Docker for Windowsの場合にはここでは設定できずに「.wslconfig」というファイルで設定するようにといわれます。






この「.wslconfig」というファイルは存在していないので、作成して設定を書く必要があるようです。こちらの記事を参考にしました。



メモリを食いつぶす問題

タスクマネージャーを見るとわかりますが、Vmmemというタスクがメモリをガンガン食いつぶします。
この問題もIssueが立ってます。

そのうち修正は入ると思いますが、Issueでは今の回避方法の提案がされています。

  1. 再起動
  2. WSLメモリの上限設定
  3. コマンドでのメモリ解放

Docker for Windowsを入れるまでにやったこと – Qiita


僕にこの問題が発生したのは最近のことなのですが、記事は去年のものなのでDocker for Windowsには昔からある問題のようです。なんとかしてくれ。



「.wslconfig」を作成して設定

ユーザーフォルダに「.wslconfig」というファイルを作成して以下を設定しました。


[wsl2]
memory=2GB
swap=16GB
localhostForwarding=true


先ほどの記事をコピペしただけです。ファイルを保存後Windowsを再起動。再起動後、どうなっているかを確認してみると……







2GBは「2,097,152KB」なので、概ね設定の範囲内で収まっているように見えます。この時点では起動しているコンテナに対して負荷を掛けていない状態なので、実際に何か動作させたときにどんな挙動になるかはわかりませんが少なくとも「64GBのメモリ全部使う」みたいな状況は回避できているようです。


もしお困りの方がいらっしゃいましたらご参考までに。