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.conf通常在 Ubuntu 启动时由 Systemd 解析(我相信是通过systemd-sysctl.service)。由于 WSL不使用 Systemd,当您关闭并重新启动 WSL 子系统时,它不会得到“处理”。这与我在回答中描述的情况类似这个 Stack Overflow 问题(现在不需要阅读,但如果您需要的话,它有更多详细信息)。

解决方案(也正如我在那个特定答案中所描述的)是使用kernelCommandLineWSL2 内核的设置:

  • 在您的 Windows%userprofile%目录中(通常C:\Users\<username>)创建或编辑.wslconfig以下内容:

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

  • wsl --shutdown从 PowerShell、CMD 或“开始”菜单发出

  • 重新开始

您应该发现vm.swappiness现在已持久化。请注意,由于所有 WSL2 会话都共享同一个内核,因此此选项将全局生效。无论您如何设置 swappiness(或任何内核参数),情况都是如此。

还请注意,该 Stack Overflow 问题的 OP 至少在 Windows 10 build 18363 中对此进行了测试。


其他选择

我相信这个.wslconfig选项可能是最好的,但你也可以:

  • /etc/wsl.conf与使用[boot]Windows 11 上的部分强制sysctl在每次启动时运行。
  • 使用您的用户配置文件手动运行它。如果您选择这种方式,请使用类似的方法wsl.exe -u root sysctl --system来避免输入密码或配置sudoers

相关内容