Wie leere ich Swap, wenn es freien Arbeitsspeicher gibt?

314

Wenn ich eine RAM-intensive App öffne (VirtualBox auf 2 GB RAM eingestellt), wird in der Regel ein Teil des Auslagerungsspeichers verwendet, je nachdem, was ich zu diesem Zeitpunkt noch geöffnet habe.

Wenn ich diese letzte Anwendung beende, werden 2 GB RAM freigegeben, aber derselbe Swap-Speicher bleibt erhalten.

Zum Beispiel habe ich gerade, ungefähr zwei Stunden nach dem Schließen von VirtualBox, 1,6 GB freien RAM und immer noch 770 MB im Swap.

Wie kann ich Ubuntu anweisen, diesen Swap nicht mehr zu verwenden und wieder den Arbeitsspeicher zu verwenden?

jfoucher
quelle
Am einfachsten ist es, das Gerät neu zu starten und Zeit für das Kopieren auf RAM und Free RAM zu sparen. Das spart Strom bei Laptop- und CPU-Temperatur
Mohamed Slama,
5
Die große Annahme, dass das Wiederauffüllen des gesamten Materials auf Ihrem Computer weniger Zeit in Anspruch nimmt.
JQwierdy
Zumindest Ubuntu 16.04 kann Swap noch lange nach Bedarf verwenden, sodass Ihr System um Größenordnungen langsamer wird, wenn Sie sich auf die Swap-Datei verlassen, obwohl dies nicht mehr erforderlich ist. Das manuelle Eingreifen kann daher von Nutzen sein. Ein Neustart ist nicht immer möglich.
Matt

Antworten:

167

Nur weil Swap zugewiesen wird, heißt das noch lange nicht, dass er "verwendet" wird. Während Programme wie system monitor und top einen Teil des zugewiesenen Swap-Speicherplatzes anzeigen (in Ihrem Beispiel 770 MB), bedeutet dies nicht, dass das System aktiv ein- / auslagert.

Mit dem vmstatBefehl können Sie herausfinden, ob sich etwas in der Zwischenzeit befindet . Lassen Sie es einige Sekunden laufen, um sich zu beruhigen und die siSpalten (Swapin) und so(Swapout) zu beobachten. Wenn nichts passiert, gibt es keinen Grund zur Sorge.

Hier ist die Ausgabe von "Laufen" vmstat 1, bei der Sie sehen können, dass meine Maschine überhaupt nicht wechselt.

procs -----------memory---------- ---swap-- -----io---- -system-- ----cpu----
 r  b   swpd   free   buff  cache   si   so    bi    bo   in   cs us sy id wa
 0  0  78588 230788   9596  72196    0    0     0     0  543  652 12  6 78  0
 0  0  78588 230780   9596  72196    0    0     0     0  531  410  1  0 99  0
 0  0  78588 230796   9596  72196    0    0     0     0  300  335  1  1 97  0
 1  0  78588 230788   9608  72224    0    0    40     0  737  762  4  4 84  8
 5  0  78588 230788   9608  72224    0    0     0     0  415  385  9  3 84  0
 0  0  78588 230540   9616  72224    0    0     0    44  611  556 55  5 31  0
 0  0  78588 230532   9616  72224    0    0     0     0  574  662  1  6 89  0

Doch hier in sehen topSie, ich habe Swap Space zugewiesen: -

Mem:    475236k total,   245076k used,   230160k free,     9720k buffers
Swap:   491512k total,    78588k used,   412924k free,    72476k cached
Popey
quelle
32
"Kein Grund zur Sorge", bis zu dem Punkt, an dem ich weiterhin eine Anwendung verwende, die ausgelagert wurde. dann bricht die Hölle los.
törzsmókus
207
Dieser Beitrag beantwortet die Frage nicht.
Emchristiansen
18
Die Prämisse der Frage basiert auf falschen Vorstellungen. Dieser Beitrag behandelt die Missverständnisse.
Popey
30
Ich sehe kein Missverständnis, ich sehe eine Meinungsverschiedenheit darüber, was "benutzt" bedeutet. Sie meinen "verwendet", um sich auf das aktive Ein- / Auslagern zu beziehen, während die ursprüngliche Frage mit "verwendet" gestellt zu sein scheint, was bedeutet, dass Daten ausgelagert wurden, die möglicherweise später wieder eingelagert werden müssen berechtigte Gründe für den Wunsch, den Swap nach einem Ereignis zu löschen, das viel anderen Speicher auslagert, wobei das aktive Auslagern, von dem der Benutzer weiß, im Wesentlichen vorzeitig abgebaut wird (insbesondere, wenn das spätere 'Auslagern' wahrscheinlich auftritt, während der Datenträger ist aus anderen Gründen unter Last).
Drfrogsplat
39
Nach dem Ausführen einer speicherintensiven Anwendung reagieren meine anderen Anwendungen nicht mehr, wenn ich zu ihnen wechsle, vermutlich weil sie ausgetauscht wurden. Eine Möglichkeit, das System anzuweisen, so viele Daten wie möglich auszutauschen (gefolgt von einer Kaffeepause), wäre besser, als jedes Mal 20 Sekunden warten zu müssen, wenn ich Alt + Tabulatortaste drücke.
Mark K Cowan
424

Der Linux-Kernel, der Ubuntu zugrunde liegt, "tauscht" diese Seiten bei Bedarf automatisch von der Festplatte in den Arbeitsspeicher aus. Im Allgemeinen würde ich also sagen, dass dies ganz natürlich geschehen soll.

Wenn Sie jedoch wirklich das Gefühl haben, dass Sie es erzwingen müssen (ich sehe ein Szenario, in dem Sie wissen möchten, dass das System später reagiert), können Sie Swap für einen Moment deaktivieren und wieder aktivieren

sudo swapoff -a
sudo swapon -a

ODER alternativ als einzelne Zeile

swapoff -a; swapon -a

Gehen Sie dabei vorsichtig vor, da Ihr System möglicherweise instabil wird, insbesondere, wenn der Arbeitsspeicher bereits niedrig ist.

SpamapS
quelle
8
Das war der Trick, der Swap wurde auf RAM kopiert. Ich schätze, Sie müssen nur sicherstellen, dass mindestens die Menge an Swap als freier RAM verwendet wird, bevor Sie Swapoff ausführen, oder?
jfoucher
12
Der Swap wurde nicht in den Arbeitsspeicher kopiert. Es war nur behindert. Sie sollten zuvor sicherstellen, dass die Box nicht vertauscht wird. Wenn Sie dies tun, wird der Kernel den Speicher verschwinden sehen und der OOM-Killer wird wahrscheinlich damit beginnen, Anwendungen willkürlich zu beenden. Es gibt keinen Grund, warum Sie den Tausch wie folgt "säubern" müssen. (siehe meinen anderen Kommentar) :)
Popey
51
Tatsächlich wird der Auslagerungsvorgang im Grunde genommen auf RAM kopiert, oder genauer gesagt, die Seiten werden wieder von der Festplatte in den RAM ausgelagert, bevor der Auslagerungsvorgang deaktiviert werden kann.
SpamapS
14
Die Seiten werden nur dann in den Arbeitsspeicher kopiert, wenn sie von einem Prozess noch benötigt werden. Manchmal gehört eine ausgelagerte Seite zu einem Prozess, der bereits abgeschlossen wurde, und der Kernel möchte diese Seiten nicht sofort aus dem Auslagerungsmodus entfernen.
BrunoJCM
6
Dies sollte die richtige Antwort sein, da auf diese Weise die ausgelagerten Seiten wieder in den Arbeitsspeicher verschoben und anschließend der Auslagerungsspeicher geleert werden kann
Alfonso Jiménez,
144

Sie können auch Ihren "swappiness" -Wert auf den Standardwert von 60 einstellen. Auf diese Weise wird der Swap zunächst nicht so groß. Warum der Standardversand auf 60 eingestellt ist, wenn der empfohlene Wert 10 ist, ist mir ein Rätsel. Aus dem Ubuntu SwapFAQ :

Die Standardeinstellung in Ubuntu ist swappiness = 60. Das Verringern des Standardwerts für swappiness verbessert wahrscheinlich die Gesamtleistung für eine typische Ubuntu-Desktop-Installation. Ein Wert von swappiness = 10 wird empfohlen , Sie können jedoch gerne experimentieren.

Indem Sie diesen Wert auf 10 oder sogar 0 ändern, können Sie einem älteren System mit langsamer Fahrt einen deutlichen und wahrnehmbaren Geschwindigkeitsschub hinzufügen. Wenn Sie diesen Wert auf 0 setzen, wird Swap für Linux-Kernel 3.4 und niedriger nicht deaktiviert. Ab Version 3.5 sollten Sie jedoch den Wert 1 verwenden, wenn Sie die niedrigste Einstellung * beibehalten möchten.

Ich sehe keinen Grund, dies nicht auf 0 zu setzen, da alles, was die Festplatte trifft, langsamer als RAM ist. Ich habe 8 virtuelle Kerne, eine schnelle SSD und 8 GB Arbeitsspeicher, und mein Swap ist auf 0 gesetzt. Ab diesem Moment sind 3 virtuelle Maschinen aktiv, mein Arbeitsspeicherbedarf beträgt 7,1 von 7,7 GB, mein genutzter Swap beträgt nur 576 KB 952MB und alle Systeme laufen reibungslos!

Aus dem Ubuntu SwapFAQ :

Der Parameter swappiness steuert die Tendenz des Kernels, Prozesse aus dem physischen Speicher auf die Auslagerungsplatte zu verschieben. Da Festplatten viel langsamer als RAM sind, kann dies zu langsameren Antwortzeiten für System und Anwendungen führen, wenn Prozesse zu aggressiv aus dem Arbeitsspeicher verschoben werden.

  1. swappiness kann einen Wert zwischen 0 und 100 haben
  2. swappiness = 0 weist den Kernel an, das Auslagern von Prozessen aus dem physischen Speicher so lange wie möglich zu vermeiden
  3. Mit swappiness = 100 wird der Kernel angewiesen, Prozesse aggressiv aus dem physischen Speicher auszutauschen und sie in den Swap-Cache zu verschieben

Im Folgenden finden Sie grundlegende Anweisungen zum Überprüfen der Swap-Fähigkeit, zum Leeren der Swap-Fähigkeit und zum Ändern der Swap-Fähigkeit auf 0:

So überprüfen Sie den Swappiness-Wert:

cat /proc/sys/vm/swappiness

So setzen Sie Swap vorübergehend auf 0 ( wie von SpamapS vorgeschlagen ):

Dadurch wird Ihr Swap geleert und der gesamte Swap wird zurück in den Speicher übertragen. Stellen Sie zunächst sicher, dass genügend Arbeitsspeicher verfügbar ist, indem Sie die Registerkarte "Ressourcen" von gnome-system-monitor anzeigen. Der verfügbare Arbeitsspeicher sollte größer sein als der von Ihnen verwendete Swap. Dieser Vorgang kann eine Weile dauern. Verwenden Sie gnome-system-monitor, um den Fortschritt zu überwachen und zu überprüfen.

sudo swapoff --all

So setzen Sie den neuen Wert auf 0:

sudo sysctl vm.swappiness=0 

So schalten Sie den Swap wieder ein:

sudo swapon --all

So setzen Sie swappiness dauerhaft auf 0:

  1. sudoedit /etc/sysctl.conf
  2. Fügen Sie diese Zeile hinzu vm.swappiness = 0
  3. sudo shutdown -r now # System neu starten

* Mit der Kernel-Version 3.5+ wird das Setzen von swappiness auf 0 vollständig deaktiviert und die Einstellung 1 wird empfohlen, wenn Sie den niedrigsten swappiness-Algorithmus wünschen. Quelle: https://www.percona.com/blog/2014/04/28/oom-relation-vm-swappiness0-new-kernel/

Elijah Lynn
quelle
1
Ich habe die Antwort soeben aktualisiert, dass sie eine dauerhafte Methode zum Festlegen der Austauschbarkeit enthält. Ich bin mir nicht sicher, wie es so sehr aufgewertet wurde, ich vermute, niemand hat es getestet.
Elijah Lynn
1
Weitere gute Lektüre zu Swappiness in dieser Antwort => askubuntu.com/a/103916/11929
Elijah Lynn
3
Ich bin nicht sicher, ob dies verfügbar war, als der Autor die Antwort ursprünglich gepostet hat, aber für Ubuntu-Server-Installationen ist ein Austauschwert von "60" festgelegt, da diese Umgebung andere Leistungsspezifikationen aufweist. help.ubuntu.com/community/…
Frito
1
Diese Einstellung ist sehr effektiv bei der Steuerung der Größe des Swap. Mein System verfügt über 16G RAM und 16G Swap. Manchmal renne ich zu VMs und einige meiner Anwendungen werden ausgelagert. Wenn ich die VMs schließe, sinkt die RAM-Auslastung, aber die Auslagerungsauslastung bleibt gleich und mein System bleibt beim Ändern von Anwendungen zurück. Das Ändern der Tauschbarkeit hat die Leistung für mich verbessert.
Kapad
1
Dies sollte wirklich die akzeptierte Antwort sein. Eine gründliche Erläuterung des Problems und seiner Lösung sowie Links und eine Lösung, um den Swap-Speicher beizubehalten, aber zunächst die Kontrolle zu behalten. Großartiges Zeug. Vielen Dank. :)
Jack_Hu
53

Ich habe festgestellt, dass das Leeren von Swap auf Systemen mit langsamen Festplatten und begrenztem RAM sehr hilfreich sein kann. Natürlich ist, wie bereits erwähnt, der Weg, dies zu tun, zu laufen sudo swapoff -a; sudo swapon -a. Das Problem hierbei ist, dass bei unzureichendem RAM alle möglichen Probleme auftreten.

Ich habe ein Skript geschrieben, das ich nenne und toggle_swapdas seit einigen Jahren für mich funktioniert. Es wird nach genügend freiem RAM gesucht, bevor der Swap deaktiviert wird. Hier ist es:

#!/bin/bash

free_data="$(free)"
mem_data="$(echo "$free_data" | grep 'Mem:')"
free_mem="$(echo "$mem_data" | awk '{print $4}')"
buffers="$(echo "$mem_data" | awk '{print $6}')"
cache="$(echo "$mem_data" | awk '{print $7}')"
total_free=$((free_mem + buffers + cache))
used_swap="$(echo "$free_data" | grep 'Swap:' | awk '{print $3}')"

echo -e "Free memory:\t$total_free kB ($((total_free / 1024)) MB)\nUsed swap:\t$used_swap kB ($((used_swap / 1024)) MB)"
if [[ $used_swap -eq 0 ]]; then
    echo "Congratulations! No swap is in use."
elif [[ $used_swap -lt $total_free ]]; then
    echo "Freeing swap..."
    sudo swapoff -a
    sudo swapon -a
else
    echo "Not enough free memory. Exiting."
    exit 1
fi
Scott Severance
quelle
Super, ich habe so etwas gesucht. Um ein bisschen sicherer zu sein, können Sie die Anzahl und die Prozentsätze angeben und dann fragen, um ganz sicher zu gehen.
Atherion
2
Ich habe den Code aktualisiert und eine gist-basierte gist.github.com/Jekis/6c8fe9dfb999fa76479058e2d769ee5c
Jekis
Dies ist die Schlussfolgerung, zu der ich nach dem Lesen aller Tipps gelangt bin, als ob man irgendwie sicherstellen sollte, dass tatsächlich genügend RAM vorhanden ist, bevor man Swap beendet. Vielen Dank, mein Herr, wundervolles Drehbuch. Sollte standardmäßig in Ubuntu enthalten sein (kein Scherz, es ist wirklich ein Musthave.)
Shiki
Abgesehen davon, dass Sie beim Ausschalten und vor dem erneuten Einschalten der Swap-Funktion nicht genügend Speicherplatz haben, wenn Sie eine neue Funktion ausführen.
Barteks2x
Das hängt davon ab, wie viel freier Speicher Sie haben. Wenn genügend freier Speicher vorhanden ist, um alles in Swap AND dem neuen Prozess zu speichern, gibt es kein Problem. Wenn nicht, dann hast du recht.
Scott Severance
25

Nachdem ich ein paar Tage mit Swappiness rumgespielt habe, bin ich zu dem Schluss gekommen, dass der Kernel auf seine eigenen Geräte gestellt werden sollte. Es weiß, was es tut, und es ist optimiert, um Ihnen die beste Erfahrung zu bieten.

Wenn Sie keinen guten Grund haben, diese Festplatte zurück zu wollen, lasse ich es.

Erigami
quelle
2
Ich hatte ein paar Sachen im Swap, vmstat zeigte mir, dass Swapin und Swapout stattfanden, und Chrome war veraltet, während meine CPU kaum benutzt wurde. Grund genug, nein?
Xerus
Es gibt definitiv Fälle, in denen das bestimmte Austauschen auf dem Desktop zu Verzögerungen führt. (Nicht während des Swappings, sondern auch danach, wenn genügend RAM vorhanden ist, für lange Zeit danach.) Im besten Fall handelt es sich bei dieser Antwort also nur um subjektive Erfahrungen, die in einigen Fällen auftreten.
Cray,
-1

Die Leistung wird dadurch nicht beeinträchtigt, wenn der Swap-Bereich belegt ist. Die einzige Leistungseinbuße ist, dass Sachen in / aus dem Tausch gehen. Wenn nichts ausgetauscht wird, müssen Sie sich um nichts kümmern.

Rory
quelle
10
Ja , aber wenn etwas wird getauscht wird es nicht die Leistung beeinträchtigen, daher diese Frage.
Quant
Das ist ein richtiger Unsinn, normalerweise befinden sich große Fallback-Auslagerungen auf Festplatten oder in der Regel auf einem langsameren Gerät als RAM - wenn der Speicherplatz knapp wird, werden vorhandene Daten ausgetauscht - wie z. ..
jave.web