WSL2 に割り当てるメモリサイズを手動で固定値を設定する方法

Windows

WSL2 を利用しているとメモリが枯渇することがあります。

ホスト側(Windows 側)に搭載したメモリによって WSL2 に割り当てられるメモリ量が自動的に決まってしまうため、自分が割り当てたい以上のメモリが割当たることもあります。

また、ホスト側(Windows 側)の搭載メモリが多い場合は、WSL2 側にもっとメモリを割り当てたいのに。と感じることもあるかもしれません。

今回は、WSL2 に割り当てるメモリサイズを指定する方法についてご紹介します。

初期状態(デフォルト)の WSL2 のメモリ割当量はどのように決まるのか

まずは、何も設定しない場合の WSL2 のメモリ割り当て量がどのように決まるかを知っておきましょう。

Microsoft のリリースノートのビルド 20175に以下の記載があります。

WSL2 VM の既定のメモリ割り当てを、ホスト メモリの 50% または 8 GB のどちらか少ない方になるように調整します

具体的に、本体 PC 側のメモリサイズが 8GB、16GB、32GB の場合については以下の通りになります。

本体 PC のメモリサイズWSL に割り当てられるメモリサイズ
8GB4GB
16GB8GB
32GB8GB

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 オフの設定方法については以下の記事でも紹介しています。

Windows

Posted by snow