Swap Space freigeben

11505
Robert Munteanu

Manchmal scheint der Kernel die Absicht zu haben, zB Firefox im Swap zu halten, obwohl genügend physischer Speicher zur Verfügung steht und ich Firefox verwende:

robert@rm:~> free -m total used free shared buffers cached Mem: 3009 1904 1104 0 109 679 -/+ buffers/cache: 1116 1892 Swap: 4102 885 3216 

Gibt es einen Befehl, den Kernel anzuweisen, Swap-Speicherplatz zu löschen und den verfügbaren freien Speicher zu verwenden?


Update : obwohl ich kurzfristig swapon / swapoff verwendet habe, habe ich jetzt eingestellt

sudo sysctl vm.swappiness=30 

wie in einer anderen Antwort vorgeschlagen, und sehr gute Ergebnisse erzielen.

10

4 Antworten auf die Frage

15
nagul

Sie könnten tun, was Nik vorschlug, und swapoff verwenden . Es gibt jedoch eine andere, elegantere Möglichkeit, "swappiness" anzupassen, oder wie aggressiv der Kernel Programme in Systemen, auf denen die 2.6er Kernel laufen, auf die Festplatte auslagert.

In den Linux-Kernel-Mailinglisten gab es heftige Debatten über die Richtlinie, die der Kernel bezüglich des Auslagerungsverhaltens befolgen sollte . Das Ergebnis ist, dass wir jetzt einen Patch in 2.6-Kerneln haben, mit dem wir dieses Verhalten weitgehend anpassen können .

Beachten Sie, dass Sie dazu Root-Berechtigungen benötigen, wie Sie die Befehle swapoff / swapon ausführen würden.

Der aktuelle Wert von "swappiness" kann in der Datei / proc / sys / vm / swappiness oder durch Ausführen des Befehls sysctl überprüft werden :

sudo sysctl vm.swappiness 

Die "Swap" -Werte können im Bereich von 0 (kein Swap) bis 100 liegen (so viel wie möglich auf die Festplatte wechseln ). Ubuntu wird mit dem Standard-Swappiness auf 60 ausgeliefert.

Um dies für eine Sitzung zu ändern, rufen Sie sysctl erneut auf, und übergeben Sie ihm einen Wert für swappiness:

sudo sysctl vm.swappiness=30 

Neben frei, können Sie natürlich überwachen die Auswirkungen dies zu tun, über die hervorragende htop oder iotop Utilities.

Wenn Ihnen das gefällt, was Sie sehen, und Sie diesen Wert auch nach einem Neustart beibehalten möchten, platzieren Sie einfach "vm.swappiness = 30" in der Datei /etc/sysctl.conf .

$ sudo sysctl vm.swappiness vm.swappiness = 30 $ sudo sysctl vm.swappiness=40 vm.swappiness = 40 $ sudo sysctl vm.swappiness vm.swappiness = 40 $ sudo tail /etc/sysctl.conf  #net.ipv4.conf.all.accept_source_route = 0 #net.ipv6.conf.all.accept_source_route = 0 # # Log Martian Packets #net.ipv4.conf.all.log_martians = 1 # # The contents of /proc/<pid>/maps and smaps files are only visible to  # readers that are allowed to ptrace() the process # kernel.maps_protect = 1 vm.swappiness=30 

Sie können mit verschiedenen Werten spielen, bis Sie einen gefunden haben, der einen akzeptablen Grad an Austausch auf Ihrem Computer mit sich bringt.

Sehr informativ, danke! Jonik vor 15 Jahren 0
+1 für sysctl. Wenn Sie mit verschiedenen Swappiness-Werten experimentieren, können Sie direkt in die proc-Datei schreiben (echo "30"> / proc / sys / vm / swappiness). Diese Änderungen sind temporär und werden nicht in die Datei /etc/sysctl.conf geschrieben. Wenn Sie mit den Einstellungen zufrieden sind, nehmen Sie mit sysctl eine dauerhafte Änderung vor. Shawn Chin vor 15 Jahren 0
6
David Spillett

Denken Sie daran, dass die Sachen, die Sie getauscht haben, zu einer fleißigeren Zeit da waren als jetzt.

Möglicherweise stellen Sie fest, dass sich die Daten auch im RAM befinden. Sie wurden zur Verwendung zurückgeladen, aber nicht vom Swap gelöscht. Der Kernel tut dies, um Zeit für die nächste belegte Zeit zu sparen. Wenn die Daten bereits dorthin kopiert wurden, kann der verwendete RAM einfach freigegeben werden, anstatt zuerst Festplattenschreibvorgänge auszuführen. Wenn Sie also nicht wissen, dass die Maschine in naher Zukunft nicht erneut ausgetauscht werden muss, kann das Erzwingen der Freigabe des Swap-Bereichs nichts anderes bewirken, als das nächste Mal etwas langsamer zu werden, wenn ein Swap-Vorgang erforderlich ist.

Dies wird auf der Basis von Löschvorgängen verwaltet. Wenn die Kopie im RAM aktualisiert wird, werden die Blöcke im Swap freigegeben.

Wenn der Swap-Speicherplatz für etwas anderes benötigt wird, was im Moment nicht der Fall ist, da Sie viel frei haben, wird er natürlich für diese Verwendung freigegeben.

Sie können nicht erkennen, wie viele Daten sich in diesem Status befinden (sowohl auf datenträgerbasierten Seiten in Auslagerungsbereichen als auch im RAM) in der Ausgabe von free. Sie können es jedoch über das /procspezielle Dateisystem sehen. Betrachten Sie die Ausgabe von cat /proc/meminfofür die SwapCachedZählung.

Zwei weitere Gründe für einen Swap-Einsatz, wenn es anscheinend Ersatzspeicher gibt, sind

  • Wenn der Kernel unter starker E / A-Last entschieden hat, dass Seiten, die seit Ewigkeiten nicht verwendet wurden, besser ausgelagert werden, so dass er den RAM für Cache / Puffer verwenden kann. Dies ist jedoch bei Ihrem freeAusgang wahrscheinlich nicht der Fall haben einen Teil des nicht wirklich zugewiesenen Arbeitsspeichers sowie desjenigen, der von E / A-Cache / Puffern verwendet wird.
  • Die Seiten wurden aus irgendeinem Grund zuvor ausgelagert und seitdem nicht mehr benötigt - vielleicht handelt es sich um Speicher, der von einem Prozess verwendet wird, der seit einiger Zeit inaktiv ist. In diesem Fall kann das Freigeben des Tauschvorgangs (dh das Zurückladen der Seiten in den Arbeitsspeicher) die Antwortzeit dieses Prozesses beim nächsten Mal verbessern, wenn etwas anderes als der Ruhezustand erforderlich ist. Wenn er jedoch schon länger inaktiv ist, ist er möglicherweise nicht erforderlich jederzeit in naher Zukunft.
+1 für eine hervorragende Erklärung. Zu Ihrer Information, * vmstat * können Sie die Daten von / proc / meminfo nicht durch alle Daten sehen. nagul vor 15 Jahren 1
2
nik

Sie könnten einswapoff - benötigen Root-Berechtigungen,
aber ich denke, das ist kein Problem für Sie.

1
mas

Denken Sie daran, dass dies freenur eine Momentaufnahme der Speichernutzung ist. Das Ergebnis, das Sie sehen, kann bedeuten, dass das System zu einem früheren Zeitpunkt zu wenig RAM hatte, sodass das RAM-residentes Material ausgelagert wurde. Seitdem ist RAM frei geworden, aber das Material für den Swap wurde nicht mehr benötigt, daher wird es immer noch beim Swap gehalten, anstatt nur den RAM zu überladen. In diesem Fall wäre das Deaktivieren des Tauschvorgangs eine schlechte Idee. Gibt es Prozesse, die seit dem letzten Neuladen so viel RAM erfordern?

Außerdem möchten Sie vielleicht prüfen, ob Sie über Ulimit keine Einschränkung für die maximale Größe der Residenten festgelegt haben (normalerweise in / etc / profile, aber dies hängt von den Distributionen ab und kann pro Prozess festgelegt werden (z. B. in einem Startskript). ).

Schließlich gibt es unter Microsoft Windows Berichte über bestimmte Probleme, bei denen Firefox auf die Festplatte ausgelagert wurde, z. B. beim Minimieren (z http://joeabiraad.com/mozilla-firefox/control-your-firefox-ram-usage/113 ). Ich habe davon auf GNU / Linux-Systemen nichts gehört, aber es lohnt sich vielleicht, es zu erkunden.

Danke für die Antwort. Mein Problem ist nicht, dass Swap verwendet wird, sondern dass es jetzt für aktive Programme verwendet wird, z. B. Firefox und Thunderbird, die sich träge anfühlen. Bei einem Swapoff / Swapon fühlen sie sich wieder bissig. Robert Munteanu vor 15 Jahren 0