Swap Space freigeben

10

Manchmal scheint der Kernel darauf bedacht zu sein, zB Firefox im Austausch zu halten, obwohl genügend physischer Speicher verfügbar ist 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, um den Kernel anzuweisen, den Swap Space 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 erhalten Sie sehr gute Ergebnisse.

Robert Munteanu
quelle

Antworten:

2

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

nik
quelle
15

Sie könnten tun, was Nik vorgeschlagen hat, und Swapoff verwenden . Es gibt jedoch eine andere, elegantere Möglichkeit, die "Swappiness" zu optimieren oder wie aggressiv der Kernel Programme auf Systemen in Systemen ausführt, auf denen die 2.6-Kernel ausgeführt werden.

In den Mailinglisten des Linux-Kernels gab es heftige Debatten über die Richtlinien, die der Kernel hinsichtlich des Austauschverhaltens befolgen sollte . Das Ergebnis ist, dass wir jetzt einen Patch in 2.6-Kerneln haben, mit dem wir dieses Verhalten weitgehend optimieren können.

Beachten Sie, dass Sie dazu Root-Berechtigungen benötigen, da 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 dieses Befehls sysctl überprüft werden :

sudo sysctl vm.swappiness

Die "Swapiness" -Werte können von 0 (kein Swap) bis 100 (so viel wie möglich auf die Festplatte tauschen) reichen . Ubuntu wird mit einer Standardeinstellung von 60 ausgeliefert.

Um dies für eine Sitzung zu ändern, rufen Sie sysctl erneut auf und übergeben Sie ihm einen Swappiness-Wert, der verwendet werden soll:

sudo sysctl vm.swappiness=30

Neben kostenlos können Sie die Auswirkungen natürlich auch über die hervorragenden Dienstprogramme htop oder iotop überwachen .

Wenn Ihnen das, was Sie sehen, gefällt und Sie diesen Wert bei Neustarts beibehalten möchten, fügen Sie einfach "vm.swappiness = 30" in die Datei /etc/sysctl.conf ein .

$ 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 finden, der ein akzeptables Maß an Austausch auf Ihrem Computer erfordert.


quelle
+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 Änderung ist vorübergehend und wird nicht in /etc/sysctl.conf geschrieben. Wenn Sie mit den Einstellungen zufrieden sind, verwenden Sie sysctl, um eine "dauerhafte" Änderung vorzunehmen.
Shawn Chin
6

Denken Sie daran, dass das Tauschmaterial zu einem geschäftigeren Zeitpunkt als jetzt dort abgelegt wurde.

Möglicherweise befinden sich die Daten auch im RAM - sie wurden zur Verwendung zurückgeladen, aber nicht vom Swap gelöscht. Der Kernel tut dies, um in der nächsten ausgelasteten Phase Zeit zu sparen. Wenn die Daten bereits dort kopiert wurden, kann er nur den von ihm verwendeten RAM freigeben, anstatt zuerst Festplattenschreibvorgänge ausführen zu müssen. Wenn Sie also nicht wissen, dass die Maschine in naher Zukunft nicht erneut ausgetauscht werden muss, kann das Erzwingen der Freigabe von Swap-Speicher nichts anderes bewirken, als die Dinge beim nächsten Austausch etwas langsamer zu machen.

Dies wird auf der Basis von Löschen und Schreiben verwaltet. Wenn also 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 genügend freie Plätze haben, wird er natürlich für diese Verwendung freigegeben.

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

Weitere zwei Gründe für die Verwendung von Swap, wenn anscheinend freier Speicher vorhanden ist, sind

  • Bei starker E / A-Auslastung hat der Kernel entschieden, dass Seiten, die seit Ewigkeiten nicht mehr verwendet werden, besser ausgetauscht werden, damit der RAM für Cache / Puffer verwendet werden kann. Wenn Sie sich jedoch Ihre freeAusgabe ansehen, ist dies hier wahrscheinlich nicht der Fall haben einen Teil des wirklich nicht zugewiesenen RAM sowie den von E / A-Cache / Puffern verwendeten.
  • Die Seiten wurden aus irgendeinem Grund früher ausgetauscht und wurden seitdem einfach nicht mehr benötigt - möglicherweise wird der Speicher von einem Prozess verwendet, der seit einiger Zeit inaktiv ist. In diesem Fall kann das Freigeben des Austauschs (also das Zurückladen der Seiten in den RAM) die Reaktionszeit dieses Prozesses verbessern, wenn das nächste Mal etwas anderes als der Ruhezustand ausgeführt werden muss. Wenn er jedoch bereits einige Zeit inaktiv war, wird er möglicherweise nicht benötigt jederzeit in naher Zukunft sowieso.
David Spillett
quelle
1
+1 für eine hervorragende Erklärung. Zu Ihrer Information , mit vmstat können Sie / proc / meminfo-Daten nicht vollständig anzeigen.
1

Denken Sie daran, dass dies freenur eine Momentaufnahme der Speichernutzung ist. Das Ergebnis, das Sie sehen, könnte bedeuten, dass das System zu einem bestimmten Zeitpunkt in der Vergangenheit nicht genügend RAM hatte, sodass das RAM-residente Material ausgetauscht wurde. Seitdem ist der Arbeitsspeicher frei geworden, aber das Material für den Austausch wurde nicht benötigt, sodass er immer noch beim Austausch gehalten wird, anstatt nur den Arbeitsspeicher zu überladen. In diesem Fall wäre es eine schlechte Idee, den Swap auszuschalten. Gibt es Prozesse, die seit dem letzten Neuladen so viel RAM erfordern könnten?

Darüber hinaus möchten Sie möglicherweise überprüfen, ob Sie keine Einschränkung für die maximale Größe der Bewohner haben, die über ulimit festgelegt wurde (normalerweise in / etc / profile, aber möglicherweise variiert sie mit den Distributionen und kann pro Prozess festgelegt werden (z. B. in einem Startskript). ).

Schließlich gibt es unter Microsoft Windows Berichte über bestimmte Probleme beim Auslagern von Firefox auf die Festplatte, z. B. wenn diese minimiert sind (z http://joeabiraad.com/mozilla-firefox/control-your-firefox-ram-usage/113 ). Ich habe auf GNU / Linux-Systemen noch nichts davon gehört, aber es könnte sich lohnen, es zu erkunden.

mas
quelle
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. Ein Swapoff / Swapon ließ sie sich wieder bissig fühlen.
Robert Munteanu