Frage Wie kann man tauschen, wenn es freien RAM gibt?


Wenn ich eine RAM-intensive App öffne (VirtualBox mit 2 GB RAM), wird normalerweise etwas Swap-Space verwendet, je nachdem, was ich gerade geöffnet habe.

Wenn ich jedoch diese letzte Anwendung beende, werden die 2 GB RAM freigegeben, aber der gleiche Swap-Speicherplatz bleibt bestehen.

Zum Beispiel, im Moment, ungefähr zwei Stunden, nachdem ich VirtualBox geschlossen habe, habe ich 1.6GB freien RAM und immer noch 770MB im Swap.

Wie kann ich Ubuntu sagen, dass ich den Swap nicht mehr verwenden soll und wieder den RAM verwenden soll?


255
2017-08-06 06:43


Ursprung


Die einfachste Sache Starte dein Gerät neu und sparen Sie Zeit zu bewältigen RAM und freien RAM sparen Macht von Laptop und CPU-Temperatur - Mohamed Slama
Große Annahme, dass das erneute Befüllen aller Inhalte auf Ihrem Computer weniger Zeit in Anspruch nimmt. - jQwierdy


Antworten:


Nur weil der Swap zugeordnet ist, heißt das nicht, dass er "benutzt" wird. Während Programme wie Systemmonitor und Top zeigen, dass ein Teil Ihres Swap-Speicherplatzes zugewiesen wird (in Ihrem Beispiel 770 MB), bedeutet das nicht, dass das System aktiv ein- und austauscht.

Um herauszufinden, ob etwas ausgetauscht werden kann, können Sie die vmstat Befehl. Lassen Sie es ein paar Sekunden laufen, um sich niederzulassen und die si (swapin) und so (Auslagerungs) Spalten. Wenn nichts geschieht, gibt es keinen Grund zur Sorge.

Hier ist die Ausgabe von running vmstat 1, wo 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

Aber hier in top Sie können sehen, dass ich Swap Space zugewiesen habe: -

Mem:    475236k total,   245076k used,   230160k free,     9720k buffers
Swap:   491512k total,    78588k used,   412924k free,    72476k cached

146
2017-08-06 10:04



"Kein Grund, sich Sorgen zu machen", bis zu dem Punkt, an dem ich weiterhin eine Anwendung verwende, die ausgelagert wurde. dann bricht die Hölle los. - törzsmókus
Dieser Beitrag beantwortet die Frage nicht. - emchristiansen
Die Prämisse der Frage beruht auf Missverständnissen. Dieser Beitrag behandelt die Missverständnisse. - popey
Ich sehe kein Missverständnis, ich sehe eine Meinungsverschiedenheit darüber, was "gebraucht" bedeutet. Sie meinen "verwendet", um aktiv auf Ein- / Auslagern zu verweisen, während die ursprüngliche Frage scheinbar mit "gebraucht" gestellt wird, was bedeutet, dass Daten ausgetauscht wurden, die später ausgetauscht werden müssen. Es gibt gültige Gründe dafür, den Swap nach einem Ereignis zu löschen, das viel anderen Speicher austauscht, wodurch der aktive Austausch, der dem Benutzer bekannt ist, im Wesentlichen vorgezogen wird, wird später auftreten (insbesondere wenn das spätere "Tauschen" wahrscheinlich auftritt, während der Festplatte ist aus anderen Gründen unter Last). - drfrogsplat
Nach dem Ausführen einer speicherintensiven Anwendung sind meine anderen Anwendungen nicht mehr reversibel, wenn ich zu ihnen wechsele, vermutlich weil sie ausgetauscht wurden. Eine Art, dem System mitzuteilen, so viele Daten wie möglich auszutauschen (gefolgt von einer Kaffeepause), wäre besser, als jedes Mal, wenn ich Alt + Tab lege, 20 Sekunden warten zu müssen. - Mark K Cowan


Der Linux-Kernel, der Ubuntu zugrunde liegt, "puffert" diese Seiten nach Bedarf automatisch von der Festplatte in den Arbeitsspeicher, also würde ich im Allgemeinen sagen, dass das natürlich passiert.

Wenn Sie jedoch das Gefühl haben, dass Sie es erzwingen müssen (ich kann ein Szenario sehen, in dem Sie wissen möchten, dass das System später reagieren wird), können Sie den Austausch vorübergehend deaktivieren und erneut aktivieren

sudo swapoff -a
sudo swapon -a

ODER alternativ als einzelner Befehl

swapoff -a && swapon -a

Seien Sie vorsichtig dabei, da Sie Ihr System möglicherweise instabil machen, besonders wenn das RAM bereits zu niedrig ist.


348
2017-08-06 06:47



Das war der Trick, der Swap wurde auf Ram kopiert. Ich denke, Sie müssen nur sicherstellen, dass mindestens die Menge an Swap als freier RAM verwendet wird, bevor Swapoff ausgeführt wird, oder? - jfoucher
Der Austausch wurde nicht in den Arbeitsspeicher kopiert. Es war nur behindert. Sie sollten sicherstellen, dass die Box nicht zuvor ausgetauscht wird. Wenn Sie dies tun, wird der Kernel den Speicher verschwinden sehen und der OOM-Killer wird wahrscheinlich Anwendungen willkürlich löschen. Es gibt keinen Grund, den Swap so zu "säubern". (siehe meinen anderen Kommentar) :) - popey
Tatsächlich wird der Austausch im Grunde genommen zu RAM kopiert, oder genauer gesagt, die Seiten werden von Platte zu RAM zurückgeschoben, bevor der Austausch deaktiviert werden kann. - SpamapS
Die Seiten werden nur dann in den RAM kopiert, wenn sie von einem Prozess noch benötigt werden. Manchmal gehört eine ausgelagerte Seite zu einem Prozess, der bereits beendet wurde, und der Kernel kümmert sich nicht darum, diese Seiten sofort aus dem Austausch zu entfernen. - BrunoJCM
Dies sollte die richtige Antwort sein, da es die Möglichkeit ist, die ausgelagerten Seiten zurück in den Arbeitsspeicher zu bringen und dann den Arbeitsspeicher zu leeren - Alfonso Jiménez


Sie können auch Ihren "Swappiness" -Wert auf den Standardwert 60 setzen, damit der Swap nicht so groß wird. Warum der Versandstandard auf 60 eingestellt ist, wenn der empfohlene Wert 10 perplex ist. Aus dem Ubuntu SwapFAQ:

Die Standardeinstellung in Ubuntu ist swappiness = 60. Das Reduzieren des Standardwerts von Swappiness wird wahrscheinlich die Gesamtleistung für eine typische Ubuntu-Desktop-Installation verbessern. Ein Wert von swappiness = 10 wird empfohlen, aber fühlen Sie sich frei zu experimentieren.

Indem Sie diesen Wert auf 10 oder sogar 0 ändern, können Sie einem älteren System mit langsamer Geschwindigkeit einen signifikanten und wahrnehmbaren Geschwindigkeitsschub hinzufügen. Wenn Sie diesen Wert auf 0 setzen, wird Swap für Linux Kernel 3.4 und höher nicht ausgeschaltet, aber mit 3.5+ wird ein Wert von 1 verwendet, wenn Sie ihn auf der niedrigsten Einstellung * belassen möchten.

Ich sehe keinen Grund, dies nicht auf 0 zu setzen, da alles, was auf die Festplatte kommt, langsamer ist als RAM. Ich habe 8 virtuelle Kerne, eine schnelle SSD & 8 GB Speicher und mein Swap ist auf 0 gesetzt. Ab diesem Moment habe ich 3 virtuelle Maschinen laufen, meine Speicherbelegung beträgt 7,1 von 7,7 GB, mein benutzter Swap ist nur bei 576KB 952MB und alle Systeme laufen reibungslos!

Aus dem Ubuntu SwapFAQ:

Der Swappiness-Parameter steuert die Tendenz des Kerns, Prozesse aus dem physikalischen Speicher auf die Swap-Disk 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, Prozesse so lange wie möglich aus dem physikalischen Speicher zu entfernen
  3. swappiness = 100 teilt dem Kernel mit, aggressiv Prozesse aus dem physikalischen Speicher auszulagern und sie in den Auslagerungscache zu verschieben

Im Folgenden finden Sie grundlegende Anweisungen zum Überprüfen der Swappiness, zum Leeren des Swaps und zum Ändern der Swappiness auf 0:

So überprüfen Sie den Swappiness-Wert:

cat /proc/sys/vm/swappiness

Temporäres Setzen von Swap auf 0 (wie von SpamapS vorgeschlagen):

Dies wird Ihren Swap leeren und den gesamten Swap zurück in den Speicher übertragen. Stellen Sie zuerst sicher, dass Sie genügend Speicher zur Verfügung haben, indem Sie den Ressourcen-Tab von gnome-system-monitor anzeigen, Ihr freier Speicher sollte größer sein als Ihr benutzter Swap. Dieser Prozess kann eine Weile dauern, verwenden Sie gnome-system-monitor, um den Fortschritt zu überwachen und zu überprüfen.

sudo swapoff --all

So legen Sie den neuen Wert auf 0 fest:

sudo sysctl vm.swappiness=0 

So schalten Sie die Swap-Funktion wieder ein:

sudo swapon --all

Um Swappiness dauerhaft auf 0 zu setzen:

  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 Swappiness auf 0 gesetzt und auf 1 gesetzt, wenn Sie den niedrigsten Swappiness-Algorithmus wollen. Quelle: https://www.percona.com/blog/2014/04/28/oom-relation-vm-swappiness0-new-kernel/


119
2018-06-11 14:10



Dies sollte die akzeptierte Antwort sein. - quant
Ich habe gerade die Antwort aktualisiert, um einen permanenten Weg zu finden, Swappiness zu setzen. Ich bin mir nicht sicher, ob es so stark aufgewertet wurde, ich schätze, niemand hat es getestet. - Elijah Lynn
Mehr gute Lektüre über Swappiness in dieser Antwort => askubuntu.com/a/103916/11929 - Elijah Lynn
Es wurde ein Hinweis zum Verhalten von swappiness = 0 hinzugefügt, das sich mit der Linux-Kernel-Version 3.5+ ändert. - Elijah Lynn
Ich bin mir nicht sicher, ob dies verfügbar war, als der Autor ursprünglich die Antwort gepostet hat, aber ein Swappiness-Wert von "60" für Ubuntu-Serverinstallationen vorhanden ist, da diese Umgebung andere Spezifikationen für die Leistung hat. help.ubuntu.com/community/... - Frito


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

Ich habe ein Skript geschrieben, das ich anrufe toggle_swap Das hat in den letzten Jahren für mich funktioniert. Es prüft auf genügend freien Arbeitsspeicher, bevor der Austausch tatsächlich 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

46
2017-12-25 16:35



Das war sehr hilfreich, danke! - Luke Cousins
Hey, das ist die beste Lösung. Vielen Dank! - Fabio A. Correa
Awesome Ich war auf der Suche nach so etwas. Vielleicht, um ein bisschen sicherer zu sein, könntest du die Anzahl und Prozentsätze angeben und dann fragen, um absolut sicher zu sein. - Atherion
Ich habe den Code aktualisiert und eine Basis erstellt gist.github.com/Jekis/6c8fe9dfb999fa76479058e2d769ee5c - Jekis
Dies ist die Schlussfolgerung, die ich nach dem Lesen aller Tipps erreicht habe, so wie man sicherstellen sollte, dass genug RAM tatsächlich vorhanden ist, bevor man den Tausch tötet. Danke, mein Herr, wundervolles Skript. Sollte standardmäßig in Ubuntu enthalten sein (kein Scherz, es ist wirklich ein Muss.) - Shiki


Nach dem Mummeln mit Swappiness Seit ein paar Tagen bin ich zu dem Schluss gekommen, dass der Kernel sich selbst überlassen werden sollte. Es weiß, was es tut, und es ist optimiert, um Ihnen die beste Erfahrung zu bieten.

Es sei denn, Sie haben einen wirklich guten Grund, diese Platte zurück zu kaufen, ich würde es lassen.


23
2017-08-06 16:34



Ich hatte ein paar Sachen im Tausch, vmstat zeigte mir, dass Swapping und Swap-out stattfanden, und Chrome war Laggy, während meine CPU kaum genutzt wurde. Gut genug, nein? - Xerus


Es wirkt sich nicht auf die Leistung aus, wenn Ihr Auslagerungsspeicher belegt ist. Die einzige Leistungseinbuße ist, dass Dinge in / aus Swap gehen. Wenn nichts getauscht wird, müssen Sie sich um nichts kümmern.


1
2017-08-11 19:35



Ja aber wenn sowas ist es wurde getauscht tut beeinflussen die Leistung, daher diese Frage. - quant