WSL2 の Swappiness が 60 にリセットされる

WSL2 の Swappiness が 60 にリセットされる

最近、Windows (WSL2) に Ubuntu をインストールしようとしました。freeコマンドを試したところ、スワップ メモリのブロックがいくつか使用されていました。swappiness を減らそうと思い、 にエントリを追加しましたvm.swappiness=10/etc/sysctl.confをリロードしてみたsysctl.confところ、うまくいったようですが、WSL をシャットダウンして新しいセッションを開始しようとすると、swappiness が既定値の 60 にリセットされました。

WSL2 上の Ubuntu はこの設定を上書きして再び 60 にするのでしょうか?

答え1

/etc/sysctl.confUbuntuのSystemdでは起動時に解析されることが多い(経由だと思いますsystemd-sysctl.service)。WSLではSystemdを使用していない、WSLサブシステムをシャットダウンして再起動しても「処理」されません。これは、私が回答で説明したことと似ています。このStack Overflowの質問(今すぐ読む必要はありませんが、必要な場合は詳細が記載されています)。

解決策は(その特定の回答でも説明したように)、kernelCommandLineWSL2 のカーネルの設定を使用することです。

  • Windows%userprofile%ディレクトリ (通常は) で、次のC:\Users\<username>ファイルを作成または編集します。.wslconfig

    [wsl2]
    kernelCommandLine = "sysctl.vm.swappiness=10"
    
  • WSL(および他のWSLインスタンス)上のUbuntuを終了する

  • wsl --shutdownPowerShell、CMD、またはスタートメニューから発行する

  • 再起動

これで、永続化されていることがわかりますvm.swappiness。すべての WSL2 セッションは同じカーネルを共有するため、このオプションはグローバルに有効になることに注意してください。これは、swappiness (または任意のカーネル パラメーター) をどのように設定したかに関係なく当てはまります。

また、これは Stack Overflow の質問の OP によって少なくとも Windows 10 ビルド 18363 まで遡ってテストされていることにも注意してください。


その他の選択肢

.wslconfigおそらくこのオプションが最適だと思いますが、次の方法もあります。

  • /etc/wsl.conf一緒に使用する[boot]Windows 11 のセクションをsysctl各起動時に強制的に実行します。
  • ユーザー プロファイルを使用して手動で実行します。この方法を使用する場合は、wsl.exe -u root sysctl --systemパスワードを入力したり、 を構成したりしなくて済むように、などを使用しますsudoers

関連情報