Swappiness no WSL2 foi redefinido para 60

Swappiness no WSL2 foi redefinido para 60

Recentemente tentei instalar o Ubuntu no Windows (WSL2). Tentei o freecomando e alguns blocos de memória swap foram utilizados. Pensei em reduzir a troca, então adicionei a entrada vm.swappiness=10em /etc/sysctl.conf. Tentei recarregar sysctl.confe 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.confgeralmente é 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 kernelCommandLineconfiguração do kernel do WSL2:

  • No diretório do Windows %userprofile%(normalmente C:\Users\<username>), crie ou edite o arquivo .wslconfigcom o seguinte:

    [wsl2]
    kernelCommandLine = "sysctl.vm.swappiness=10"
    
  • Saia do Ubuntu no WSL (e qualquer outra instância do WSL)

  • Emita um wsl --shutdowndo PowerShell, CMD ou do menu Iniciar

  • Reiniciar

Você deve descobrir que vm.swappinessisso 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 .wslconfigopção seja provavelmente a melhor para isso, mas você também pode:

  • Use /etc/wsl.confcom o[boot]seção no Windows 11 para forçar sysctla 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 --systemevitar digitar uma senha ou configurar o arquivo sudoers.

informação relacionada