Recentemente tentei instalar o Ubuntu no Windows (WSL2). Tentei o free
comando e alguns blocos de memória swap foram utilizados. Pensei em reduzir a troca, então adicionei a entrada vm.swappiness=10
em /etc/sysctl.conf
. Tentei recarregar sysctl.conf
e pareceu funcionar, mas quando tentei desligar o WSL e iniciar uma nova sessão, a troca foi redefinida para o valor padrão de 60.
O Ubuntu no WSL2 está substituindo essa configuração para torná-la 60 novamente?
Responder1
/etc/sysctl.conf
geralmente é analisado pelo Systemd no Ubuntu na inicialização (acredito via systemd-sysctl.service
). Desde a WSLnão usa Systemd, ele não será "tratado" quando você desligar e reiniciar o subsistema WSL. Isso é semelhante ao que descrevo em minha resposta aesta pergunta do Stack Overflow(não há necessidade de ler agora, mas tem mais detalhes se precisar).
A solução (também como descrevo nessa resposta específica) é usar a kernelCommandLine
configuração do kernel do WSL2:
No diretório do Windows
%userprofile%
(normalmenteC:\Users\<username>
), crie ou edite o arquivo.wslconfig
com o seguinte:[wsl2] kernelCommandLine = "sysctl.vm.swappiness=10"
Saia do Ubuntu no WSL (e qualquer outra instância do WSL)
Emita um
wsl --shutdown
do PowerShell, CMD ou do menu IniciarReiniciar
Você deve descobrir que vm.swappiness
isso agora persiste. Observe que como todas as sessões WSL2 compartilham o mesmo kernel, esta opção terá efeito global. Este é o caso independentemente de como você define a troca (ou qualquer parâmetro do kernel).
Observe também que isso foi testado pelo menos no Windows 10 build 18363 pelo OP dessa questão do Stack Overflow.
Outras alternativas
Acredito que a .wslconfig
opção seja provavelmente a melhor para isso, mas você também pode:
- Use
/etc/wsl.conf
com o[boot]
seção no Windows 11 para forçarsysctl
a execução em cada inicialização. - Use seu perfil de usuário para executá-lo manualmente. Se você seguir esse caminho, use algo como
wsl.exe -u root sysctl --system
evitar digitar uma senha ou configurar o arquivosudoers
.