我最近尝试在 Windows (WSL2) 上安装 Ubuntu。我尝试了该free
命令,并使用了几块交换内存。我想减少交换,所以我vm.swappiness=10
在/etc/sysctl.conf
. 我尝试重新加载sysctl.conf
,它似乎可以工作,但是当我尝试关闭 WSL 并开始一个新会话时,swappiness 被重置为默认值 60。
WSL2 上的 Ubuntu 是否会覆盖此设置以使其再次变为 60?
我最近尝试在 Windows (WSL2) 上安装 Ubuntu。我尝试了该free
命令,并使用了几块交换内存。我想减少交换,所以我vm.swappiness=10
在/etc/sysctl.conf
. 我尝试重新加载sysctl.conf
,它似乎可以工作,但是当我尝试关闭 WSL 并开始一个新会话时,swappiness 被重置为默认值 60。
WSL2 上的 Ubuntu 是否会覆盖此设置以使其再次变为 60?
/etc/sysctl.conf
通常在启动时由 Ubuntu 中的 Systemd 解析(我相信通过systemd-sysctl.service
)。由于 WSL不使用 Systemd,因此当您关闭并重新启动 WSL 子系统时,它不会得到“处理”。这与我在对Stack Overflow 问题的回答中所描述的相似(现在无需阅读,但如果您需要,它会提供更多详细信息)。解决方案(也正如我在该特定答案中描述的那样)是使用
kernelCommandLine
WSL2 内核的设置:在您的 Windows
%userprofile%
目录(通常C:\Users\<username>
)中,使用以下内容创建或编辑文件.wslconfig
:在 WSL(和任何其他 WSL 实例)上退出 Ubuntu
wsl --shutdown
从 PowerShell、CMD 或开始菜单发出重新开始
您应该会发现它
vm.swappiness
现在仍然存在。请注意,由于所有 WSL2 会话共享同一个内核,因此此选项将全局生效。无论您如何设置 swappiness(或任何内核参数),情况都是如此。另请注意,该 Stack Overflow 问题的 OP 至少早在 Windows 10 build 18363 就已经对此进行了测试。
其他选择
我相信这个
.wslconfig
选项可能是最好的,但你也可以:/etc/wsl.conf
与 Windows 11 上的部分一起使用[boot]
以强制sysctl
在每次启动时运行。wsl.exe -u root sysctl --system
来避免输入密码或配置sudoers
。