Introduction
備忘録。
Windows Subsystem for Linux 2 で Docker for Windows を動かしている。
1 | >wsl -l -v |
それはそれとして、この WSL2 は一体どれほどのメモリを使っているのか?というのを知りたくなった。
なぜかというと、 Sentry というアプリケーションで発生したエラーを追跡し、管理してくれるソフトウェアを docker で使いたくなったのだが、要求仕様に
- 4 CPU Cores
- 8 GB RAM
なんて書かれていて、「はて、自分のマシンの WSL2 はどのくらいメモリを食っているのか?」と思った次第。
Resolution
まず、現時点で動ている WSL2 の、メモリ使用量は、タスクマネージャーから vmmem を見ることで確認。
現状は、2 GB 少し。
では、これがどこまで増えるかというと、WSL の変遷によって変わってきた模様。
Windows Subsystem for Linux のリリース ノート に従えば
- Build 20175
- VM の既定のメモリ割り当てを、ホスト メモリの 50% または 8 GB のどちらか少ない方になるように調整します [GH 4166]。
- Build 19028
- Linux VM に割り当てられた既定のメモリ容量を、ホスト メモリの80% に調整します
とある。
なので、少なくとも、100% 使い切ることは、まぁ当然ないことはわかった。
最大メモリを調節したい
既定のメモリ割り当ての意味が正直よくわからないが、vmmem を見る限り、いきなり上の値に従ったメモリを割り当てるわけではないもよう。
最大量ということだろうか。VHD の動的割り当てみたいな。
逆に言えば、Build 20175 の場合、たくさん WSL2 に割り当てたい場合は 8 GB が最大になるし、Build 19028 の場合は、80% まで無制限に食いつくす。
なので、最大量を指定することで対処。
ちなみに、Linux シェルからメモリ量を確認したところ
1 | $ free -h |
となっていた。
マシンのメモリは 64 GB なので、 64 * 0.8 = 51.2
なので、まぁ正しいと思える。
WSL2 の使用メモリを制御するには、
によれば、
%USERPROFILE%¥.wslconfig (存在しないならテキストとして作成) に下記のように記載することで対処できると。
1 | [wsl2] |
サポートされている記述は Build 18945 を参考。
現状、50 GB を最大量として動いているので、1 GB を指定すれば、vmmem と free -h
の値が変化するはず。
記載後、管理者権限のコマンドプロンプトから
1 | > wsl --shutdown |
または、管理者権限の Powershell から
1 | $ Get-Service LxssManager | Restart-Service |
を実行して、WSL2 を再起動。
(実行すると、起動している Linux シェル が勝手に終了するので注意)
その後、Linux シェル を開き、メモリを確認すると
1 | $ free -h |
意図した値になっていた。
vmmem も
と 1 GB に近似した値になっていることが確認できた。