it-swarm-eu.dev

Wie leere ich Swap, wenn es freien Arbeitsspeicher gibt?

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 jedoch die 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?

312
jfoucher

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 Befehl vmstat können Sie herausfinden, ob sich etwas in der Zwischenzeit befindet. Lassen Sie es einige Sekunden laufen, um sich zu beruhigen und die Spalten si (Swapin) und so (Swapout) zu beobachten. Wenn nichts passiert, gibt es keinen Grund zur Sorge.

Hier ist die Ausgabe von vmstat 1, bei der Sie sehen können, dass mein Computer überhaupt nicht ausgetauscht wird.

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 top können Sie sehen, dass mir Swap Space zugewiesen wurde: -

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

Der Linux-Kernel, der Ubuntu zugrunde liegt, "tauscht" diese Seiten bei Bedarf automatisch von der Festplatte in RAM aus, also würde ich allgemein sagen, lass es einfach auf natürliche Weise geschehen.

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.

418
SpamapS

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 , aber Sie können 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 eingestellt. 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 längeren Antwortzeiten für System und Anwendungen führen, wenn Prozesse zu stark 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

Nachfolgend finden Sie grundlegende Anweisungen zum Überprüfen der Austauschbarkeit, zum Leeren der Austauschbarkeit und zum Ändern der Austauschbarkeit 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 ):

Dies leert Ihren Swap und überträgt den gesamten Swap zurück in den Speicher. 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. Diese Zeile hinzufügen vm.swappiness = 0
  3. Sudo shutdown -r now # System neu starten

* Bei 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/

144
Elijah Lynn

Ich habe festgestellt, dass das Leeren von Swap auf Systemen mit langsamen Festplatten und begrenztem RAM sehr hilfreich sein kann. Wie bereits erwähnt, müssen Sie dazu natürlich Sudo swapoff -a; Sudo swapon -a ausführen. Das Problem hierbei ist, dass bei unzureichendem RAM alle möglichen Probleme auftreten.

Ich habe ein Skript geschrieben, das ich toggle_swap nenne und das 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
53
Scott Severance

Nachdem ich ein paar Tage mit swappiness rumgespielt habe, bin ich zu dem Schluss gekommen, dass der Kernel sich selbst überlassen bleiben 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.

26
Erigami

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.

0
Rory