最近、Windows (WSL2) に Ubuntu をインストールしようとしました。free
コマンドを試したところ、スワップ メモリのブロックがいくつか使用されていました。swappiness を減らそうと思い、 にエントリを追加しましたvm.swappiness=10
。/etc/sysctl.conf
をリロードしてみたsysctl.conf
ところ、うまくいったようですが、WSL をシャットダウンして新しいセッションを開始しようとすると、swappiness が既定値の 60 にリセットされました。
WSL2 上の Ubuntu はこの設定を上書きして再び 60 にするのでしょうか?
答え1
/etc/sysctl.conf
UbuntuのSystemdでは起動時に解析されることが多い(経由だと思いますsystemd-sysctl.service
)。WSLではSystemdを使用していない、WSLサブシステムをシャットダウンして再起動しても「処理」されません。これは、私が回答で説明したことと似ています。このStack Overflowの質問(今すぐ読む必要はありませんが、必要な場合は詳細が記載されています)。
解決策は(その特定の回答でも説明したように)、kernelCommandLine
WSL2 のカーネルの設定を使用することです。
Windows
%userprofile%
ディレクトリ (通常は) で、次のC:\Users\<username>
ファイルを作成または編集します。.wslconfig
[wsl2] kernelCommandLine = "sysctl.vm.swappiness=10"
WSL(および他のWSLインスタンス)上のUbuntuを終了する
wsl --shutdown
PowerShell、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
。