Swappiness bei WSL2 wird auf 60 zurückgesetzt

Swappiness bei WSL2 wird auf 60 zurückgesetzt

Ich habe vor Kurzem versucht, Ubuntu unter Windows (WSL2) zu installieren. Ich habe den freeBefehl ausprobiert und nur wenige Blöcke des Swap-Speichers wurden verwendet. Ich dachte daran, die Swappiness zu reduzieren, also habe ich den Eintrag vm.swappiness=10in hinzugefügt /etc/sysctl.conf. Ich habe versucht, neu zu laden sysctl.conf, und es schien zu funktionieren. Aber als ich versuchte, WSL herunterzufahren und eine neue Sitzung zu starten, wurde die Swappiness auf den Standardwert von 60 zurückgesetzt.

Überschreibt Ubuntu auf WSL2 diese Einstellung, um es wieder auf 60 zu setzen?

Antwort1

/etc/sysctl.confwird in Ubuntu normalerweise beim Start von Systemd analysiert (ich glaube über systemd-sysctl.service). Seit WSLverwendet kein Systemd, es wird nicht "behandelt", wenn Sie das WSL-Subsystem herunterfahren und neu starten. Dies ähnelt dem, was ich in meiner Antwort aufdiese Stack Overflow-Frage(Sie müssen es jetzt nicht lesen, aber es enthält ausführlichere Informationen, falls Sie welche benötigen).

kernelCommandLineDie Lösung (wie ich sie auch in dieser speziellen Antwort beschreibe) besteht darin, die Einstellung für den WSL2-Kernel zu verwenden :

  • Erstellen oder bearbeiten Sie in Ihrem Windows- %userprofile%Verzeichnis (normalerweise ) die folgende Datei:C:\Users\<username>.wslconfig

    [wsl2]
    kernelCommandLine = "sysctl.vm.swappiness=10"
    
  • Beenden Sie Ubuntu auf WSL (und jeder anderen WSL-Instanz).

  • wsl --shutdownGeben Sie über PowerShell, CMD oder das Startmenü einen

  • Neu starten

Sie sollten feststellen, dass dies vm.swappinessnun beibehalten wird. Beachten Sie, dass diese Option global wirksam wird, da alle WSL2-Sitzungen denselben Kernel verwenden. Dies gilt unabhängig davon, wie Sie die Swappiness (oder einen beliebigen Kernelparameter) festlegen.

Beachten Sie auch, dass dies vom OP dieser Stack Overflow-Frage mindestens seit Windows 10 Build 18363 getestet wurde.


Andere Alternativen

Ich glaube, dass die .wslconfigOption hierfür wahrscheinlich am besten geeignet ist, aber Sie könnten auch:

  • Verwendung /etc/wsl.confmit dem[boot]Abschnitt unter Windows 11, um die sysctlAusführung bei jedem Start zu erzwingen.
  • Verwenden Sie Ihr Benutzerprofil, um es manuell auszuführen. Wenn Sie diesen Weg wählen, verwenden Sie etwas wie , wsl.exe -u root sysctl --systemum die Eingabe eines Kennworts oder die Konfiguration zu vermeiden sudoers.

verwandte Informationen