Ich habe vor Kurzem versucht, Ubuntu unter Windows (WSL2) zu installieren. Ich habe den free
Befehl 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=10
in 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.conf
wird 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).
kernelCommandLine
Die 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 --shutdown
Geben Sie über PowerShell, CMD oder das Startmenü einenNeu starten
Sie sollten feststellen, dass dies vm.swappiness
nun 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 .wslconfig
Option hierfür wahrscheinlich am besten geeignet ist, aber Sie könnten auch:
- Verwendung
/etc/wsl.conf
mit dem[boot]
Abschnitt unter Windows 11, um diesysctl
Ausfü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 --system
um die Eingabe eines Kennworts oder die Konfiguration zu vermeidensudoers
.