WSL2 に割り当てるメモリサイズを手動で固定値を設定する方法
WSL2 を利用しているとメモリが枯渇することがあります。
ホスト側(Windows 側)に搭載したメモリによって WSL2 に割り当てられるメモリ量が自動的に決まってしまうため、自分が割り当てたい以上のメモリが割当たることもあります。
また、ホスト側(Windows 側)の搭載メモリが多い場合は、WSL2 側にもっとメモリを割り当てたいのに。と感じることもあるかもしれません。
今回は、WSL2 に割り当てるメモリサイズを指定する方法についてご紹介します。
初期状態(デフォルト)の WSL2 のメモリ割当量はどのように決まるのか
まずは、何も設定しない場合の WSL2 のメモリ割り当て量がどのように決まるかを知っておきましょう。
Microsoft のリリースノートのビルド 20175に以下の記載があります。
WSL2 VM の既定のメモリ割り当てを、ホスト メモリの 50% または 8 GB のどちらか少ない方になるように調整します
具体的に、本体 PC 側のメモリサイズが 8GB、16GB、32GB の場合については以下の通りになります。
本体 PC のメモリサイズ | WSL に割り当てられるメモリサイズ |
---|---|
8GB | 4GB |
16GB | 8GB |
32GB | 8GB |
WSL2 のメモリ割り当て量を指定する方法
WSL2 のメモリ割り当て量の設定はホスト側(Windows 側)の「.wslconfig」というファイルで行うことができます。
.wslconfig の場所
.wslconfig は以下のパスに作成することで、WSL2 起動時に設定が読み込まれる仕組みになっています。
C:\Users\[ユーザ名]\.wslconfig
初めて設定する際には「.wslconfig」ファイルは存在しませんのでファイルを作成する必要があります。
「.wslconfig」というファイル名でテキストファイルを作成しましょう。
.wslcofnig の記載方法
「.wslconfig」は ini ファイルの記載ルールと同じです。
以下のように設定することで、WSL2 に割り当てるメモリサイズを 4GB 固定にすることができます。
[wsl2]
memory=4GB
WSL2 のメモリ割り当て設定を反映させる
「.wslconfig」の設定を行っても、WSL2 が既に起動している場合は反映されませんので、WSL2 の再起動を行う必要があります。
WSL2 の再起動手順については、PC の再起動を行わずに実行することができます。
具体的な手順については、以下の記事を参考にしてください。
WSL2 のメモリ割り当てサイズを確認する
WSL2 のターミナルを開き、free コマンド等で確認してみましょう。
$ free -m
total used free shared buff/cache available
Mem: 3930 418 2959 1 552 3300
Swap: 0 0 0
指定したメモリ量の 4GB 割当られていることが確認できました。
その他の「.wslconfig」のおすすめ設定(Swap オフ)
WSL2 の Swap をオフにする方法をご紹介します。
WSL2 の Swap が有効になっている場合、メモリが余っている場合でも大量に読み書きが発生します。
SSD の寿命にも関係しそうなので、停止したいところです。
また、WSL2 上に kubernetes 環境を構築する際に Swap がオフであることが条件となっているなど、システム的な要件でSwap をオフに設定したい場合があります。
しかし、WSL2 の Swap は WSL2 コンソールで「sudo swapoff -a 」としても停止することができません。
WSL2の場合はメモリ割り当てサイズと同様にSwapのオフについても「.wslconfig」で設定する必要があります。
以下の通り設定することで Swap をオフにすることができます。
[wsl2]
swap=0
Swap オフの設定方法については以下の記事でも紹介しています。