WSL2 上的 Swappiness 重置為 60

WSL2 上的 Swappiness 重置為 60

我最近嘗試在 Windows (WSL2) 上安裝 Ubuntu。我嘗試了該free命令,並且使用了很少的交換記憶體區塊。我想減少交換性,所以我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 子系統時,它不會被「處理」。這與我在回答中所描述的類似這個堆疊溢位問題(現在無需閱讀,但如果您需要的話,它有更多詳細資訊)。

解決方案(也正如我在該特定答案中所描述的那樣)是使用kernelCommandLineWSL2 核心的設定:

  • 在您的 Windows%userprofile%目錄(通常)中使用以下內容C:\Users\<username>建立或編輯檔案:.wslconfig

    [wsl2]
    kernelCommandLine = "sysctl.vm.swappiness=10"
    
  • 在 WSL(以及任何其他 WSL 實例)上退出 Ubuntu

  • wsl --shutdown從 PowerShell、CMD 或開始功能表發出

  • 重新開始

您應該發現vm.swappiness現在仍然存在。請注意,由於所有 WSL2 會話共享相同的內核,因此該選項將全域生效。無論您如何設定交換性(或任何核心參數),情況都是如此。

另請注意,該 Stack Overflow 問題的 OP 至少早在 Windows 10 build 18363 就已經對此進行了測試。


其他替代方案

我相信該.wslconfig選項可能最適合此目的,但您也可以:

  • /etc/wsl.conf與使用[boot]Windows 11 上的部分強制sysctl在每次啟動時執行。
  • 使用您的用戶設定檔手動運行它。如果您走這條路,請使用類似的方法wsl.exe -u root sysctl --system來避免輸入密碼或設定sudoers

相關內容