Wie kann ich tauschen, wenn es freien RAM gibt?

250

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 die letzte Anwendung beende, werden die 2 GB RAM freigegeben, aber der gleiche Auslagerungsbereich bleibt erhalten.

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

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

    
jfoucher 06.08.2010, 08:43

6 Antworten

147

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

Um herauszufinden, ob etwas ein- oder ausgetauscht wird, können Sie den Befehl vmstat verwenden. Lassen Sie es einige Sekunden lang laufen, um die Spalten si (swapin) und so (swapout) zu beobachten. Wenn nichts geschieht, gibt es keinen Grund, sich Sorgen zu machen.

Hier ist die Ausgabe von vmstat 1 , wo Sie sehen können, dass mein Rechner ü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 kann ich 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
    
popey 06.08.2010, 12:04
339

Der Linux-Kernel, der Ubuntu zugrunde liegt, "puffert" diese Seiten automatisch von der Festplatte in den RAM-Speicher, so wie ich es brauche, also würde ich sagen, lass es einfach passieren.

Wenn Sie jedoch das Gefühl haben, dass Sie es erzwingen müssen (ich sehe ein Szenario, in dem Sie später wissen möchten, dass das System später reagiert), können Sie swap

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.

    
SpamapS 06.08.2010 08:47
119

Sie können Ihren "Swappiness" -Wert auch 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.

Wenn 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 Swapp für Linux Kernel 3.4 und niedriger nicht ausgeschaltet, aber mit 3.5+ wird der Wert 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 & amp; 8 GB Speicher und mein Swap ist auf 0 gesetzt. Ab diesem Zeitpunkt habe ich 3 virtuelle Maschinen laufen, meine Speicherbelegung beträgt 7,1 von 7,7 GB, mein benutzter Swap ist nur bei 576KB von 952MB und alle Systeme laufen reibungslos!

Aus dem Ubuntu SwapFAQ :

  

Der swappiness-Parameter steuert die Tendenz des Kerns, Prozesse aus dem physischen Speicher heraus und auf die Auslagerungsdiskette 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 Speicher verschoben werden.

     
  1. Swappiness kann einen Wert zwischen 0 und 100
  2. haben   
  3. swappiness = 0 weist den Kernel an, Prozesse so lange wie möglich aus dem physikalischen Speicher zu entfernen
  4.   
  5. swappiness = 100 teilt dem Kernel mit, aggressiv Prozesse aus dem physischen Speicher auszulagern und sie in den Auslagerungscache zu verschieben
  6.   

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

Um den Swappiness-Wert zu prüfen:

cat /proc/sys/vm/swappiness

Um vorübergehend Swap auf 0 zu setzen ( 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

Um den neuen Wert auf 0 zu setzen:

sudo sysctl vm.swappiness=0 

Um den Austausch wieder einzuschalten:

sudo swapon --all

Um swappiness dauerhaft auf 0 zu setzen:

  1. sudoedit /etc/sysctl.conf
  2. Fügen Sie diese Zeile vm.swappiness = 0
  3. hinzu
  4. 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 wünschen. Quelle: Link

    
Elijah Lynn 11.06.2012 16:10
46

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 die Möglichkeit, sudo swapoff -a; sudo swapon -a auszuführen. Das Problem hierbei ist, dass bei unzureichendem RAM-Speicher alle möglichen Probleme auftreten.

Ich habe ein Skript geschrieben, das ich toggle_swap nenne, das in den letzten Jahren für mich gearbeitet hat. 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 }')"
buffers="$(echo "$mem_data" | awk '{print }')"
cache="$(echo "$mem_data" | awk '{print }')"
total_free=$((free_mem + buffers + cache))
used_swap="$(echo "$free_data" | grep 'Swap:' | awk '{print }')"

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 25.12.2011 17:35
23

Nachdem ich ein paar Tage mit Swappiness herumgespielt habe, bin ich zu dem Schluss gekommen, dass der Kernel sein sollte sich selbst überlassen. Es weiß, was es tut, und es ist optimiert, um Ihnen die beste Erfahrung zu bieten.

Wenn Sie nicht wirklich einen guten Grund haben, diese Festplatte zurück zu kaufen, würde ich es lassen.

    
Erigami 06.08.2010 18:34
1

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 / ausgetauscht wird, müssen Sie sich um nichts kümmern.

    
Rory 11.08.2010 21:35

Tags und Links