開発環境でWSL2を使用していて、メモリの問題に悩まされていました。
元々Windowsホストのメモリ枯渇対策としてメモリサイズの指定をしていたのですが、ある時から開発を2,3時間続けているとVSCodeのRemote Containerに接続できなくなるなどの事象が発生するようになりました。
その状況に対してswapの設定をすることによって改善されたので、当初の設定やswapの設定内容に関して説明します。
開発環境
まずは、参考情報として私が開発している環境に関して記載します。
- Visual Studio Code + Remote Container
- 2つ起動
- Docker Desktop
- Windows
- フロントエンドを起動
特徴的な部分として、Visual Studio Code + Remote Containerは2つ起動して実行しています。
当初の設定値
WSL2によるホストのメモリ枯渇を防ぐための暫定対処 を参考に、以下の値を%USERPROFILE%\.wslconfig
に設定していました。
[wsl2]
memory=5GB
swap=0
この設定で問題なく動いていた時期もあったのですが、コード量が増えたことが関係したのか、ある時から毎日1回はWSLの再起動をしていました。
なお、参考情報としてWSLの再起動は以下の流れで行うことができます。
- 管理者権限で、PowerShellを開く
wsl.exe --shutdown
を実行
変更した設定内容
memory
の設定に加えてswap
も設定しました。memory
の値と同じ値を、swap
にも設定しています。(設定を適用する際には、wslの再起動が必要です。)
[wsl2]
memory=5GB
swap=5GB
上記に変更して2ヶ月程度経ちましたがが、wslの再起動を行わなくても良い状況に落ち着いています。
また、Windowsホスト側も問題なく動いています。
なぜswapを設定すると改善されたのか?
swapを設定すると、設定した値の分だけディスクを仮想メモリとして扱うことができます。
メモリが不足した際にswap領域が使用される形です。
swap領域が使用される場合システムの動作は重くなりますが、メモリ不足で動かない状況よりは好ましいかと思われます。
また、swapの設定値はリソース状況によって適切な値は異なりますし、ディスク容量が少ないPCなど設定しない方が良いケースもあると考えられます。
まとめ
WSLのメモリ設定でswapを活用し改善した話に関して、記載しました。
全てのケースに当てはまる訳ではないですが、WSL側のメモリ不足の現象が発生している方は試してみてはいかがでしょうか。
コメント