Warum wird Swapping verwendet, obwohl ich viel freien RAM habe?

181

Ich dachte, die ganze Essenz von Swap war, als temporäres Speichersicherheitsnetz zu fungieren, wenn RAM voll war, aber meine Swap-Partition wird ständig benutzt, obwohl ich manchmal so viel wie 3 GB freien RAM habe. Ist das normal?

    
Mysterio 30.06.2012, 00:16
quelle

6 Antworten

159

Sie könnten versuchen, Ihren "Swappiness" -Wert zu ändern:

Aus der Ubuntus Swap-FAQ :

  

Was ist Swappiness und wie ändere ich es?

     

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 haben

  2.   
  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 Cache zu verschieben

  6.   

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. Hinweis: Ubuntu-Server-Installationen haben andere Leistungsanforderungen als Desktop-Systeme, und der Standardwert 60 ist wahrscheinlich besser geeignet.

     

Um den Swappiness-Wert zu überprüfen

     

cat /proc/sys/vm/swappiness

     

So ändern Sie den Swappiness-Wert Eine temporäre Änderung (Verlust beim Neustart) mit einem Swappiness-Wert von 10 kann mit

vorgenommen werden      

sudo sysctl vm.swappiness=10

     

Um eine Änderung dauerhaft vorzunehmen, bearbeiten Sie die Konfigurationsdatei mit Ihrem bevorzugten Editor:

     

gksudo gedit /etc/sysctl.conf

     

Suchen Sie nach vm.swappiness und ändern Sie den Wert wie gewünscht. Wenn vm.swappiness nicht vorhanden ist, fügen Sie es am Ende der Datei wie folgt hinzu:

     

vm.swappiness=10

     

Speichern Sie die Datei und starten Sie sie neu.

Sie können auch auschecken: Pfandrecht

    
jpetersen 30.06.2012, 01:10
quelle
83

Es gibt ein paar verschiedene Aspekte zu Ihrer Frage.

Erstens, was Ihre Definition von "frei" ist. Es ist eigentlich nicht so einfach wie es in Linux (oder jedem modernen Betriebssystem) klingt.

Wie Linux RAM (sehr vereinfacht) verwendet

Jede Anwendung kann einen Teil Ihres Speichers verwenden. Linux verwendet alle sonst nicht belegten Speicher (außer den letzten paar Mb) als "Cache". Dazu gehören der Seitencache, Inode-Caches usw. Das ist eine gute Sache - es hilft, Dinge schneller zu machen. Sowohl das Schreiben auf die Festplatte als auch das Lesen von der Festplatte können durch den Cache enorm beschleunigt werden.

Idealerweise haben Sie genug Speicher für all Ihre Anwendungen, und Sie haben immer noch mehrere hundert MB für den Cache übrig. Solange Ihre Anwendungen die Speicherbelegung nicht erhöhen und das System nicht darum kämpft, genügend Speicherplatz für den Cache zu erhalten, ist in diesem Fall kein Swap erforderlich.

Sobald Anwendungen mehr RAM beanspruchen, wird nur ein Teil des Speicherplatzes belegt, den der Cache belegt hat, wodurch der Cache schrumpft. Die Zuordnung von Cache ist billig und einfach genug, um einfach in Echtzeit ausgeführt zu werden. Alles, was im Cache liegt, ist entweder nur eine zweite Kopie von etwas, das bereits auf der Festplatte liegt, und kann sofort freigegeben werden musste innerhalb der nächsten paar Sekunden auf die Festplatte auf jeden Fall geleert werden.

Dies ist keine Linux-spezifische Situation - alle modernen Betriebssysteme funktionieren auf diese Weise. Die verschiedenen Betriebssysteme berichten möglicherweise nur über freies RAM: Einige enthalten den Cache als Teil dessen, was sie als "frei" betrachten und andere nicht.

Wenn Sie von freiem RAM sprechen, ist es viel sinnvoller einzuschließen -Cache, weil es praktisch kostenlos ist - es ist verfügbar, wenn es von einer Anwendung angefordert wird. Unter Linux meldet der Befehl free beides - die erste Zeile enthält den Cache in der verwendeten RAM-Spalte und die zweite Zeile enthält den Cache (und die Puffer) in der freien Spalte.

Wie Linux Swap verwendet (noch einfacher)

Wenn Sie genug Speicher belegt haben, dass nicht mehr genügend Speicherplatz für einen reibungslosen Cache vorhanden ist, kann Linux beschließen, ungenutzten Anwendungsspeicher aus dem Arbeitsspeicher zu übernehmen, um ihn zu tauschen.

Dies geschieht nicht nach einem bestimmten Cut-off. Es ist nicht so, dass Sie einen bestimmten Prozentsatz der Zuteilung erreichen, dann beginnt Linux mit dem Tauschen. Es hat einen eher "unscharfen" Algorithmus. Es müssen viele Dinge berücksichtigt werden, die am besten durch "wie viel Druck ist für die Speicherzuweisung vorhanden" beschrieben werden kann. Wenn es viel "Druck" gibt, um neuen Speicher zuzuweisen, wird es die Chancen erhöhen, dass einige ausgetauscht werden, um mehr Platz zu schaffen. Wenn es weniger "Druck" gibt, wird es diese Chancen verringern.

Ihr System verfügt über eine "Swappiness" -Einstellung, mit der Sie die Berechnung dieses "Drucks" optimieren können. Es wird normalerweise nicht empfohlen, dies zu ändern, und ich würde dir nicht empfehlen, es zu ändern. Swapping ist insgesamt eine sehr gute Sache - obwohl es einige Randfälle gibt, in denen es die Performance beeinträchtigt, wenn man sich die Gesamtsystemleistung ansieht, ist dies ein Nettovorteil für eine Vielzahl von Aufgaben. Wenn Sie die Swappiness reduzieren, lässt sich die Menge an Cache-Speicher ein wenig mehr schrumpfen als sonst, selbst wenn es wirklich nützlich wäre. Ob dies eine gute Abwägung für jedes Problem ist, das Sie mit dem Austausch haben, liegt an Ihnen. Sie sollten nur wissen, was Sie tun, das ist alles.

Es gibt eine bekannte Situation, in der Swap wirklich die wahrgenommene Leistung auf einem Desktop-System beeinträchtigt, und zwar, wie schnell Anwendungen auf Benutzereingaben reagieren können, nachdem sie lange Zeit inaktiv waren und Hintergrundprozesse in IO aufwiesen ( wie zB ein Backup über Nacht). Dies ist eine sehr sichtbare Trägheit, aber nicht genug, um swap alle zusammen auszuschalten und sehr schwer in jedem Betriebssystem zu verhindern. Swap ausschalten und diese anfängliche Schwerfälligkeit nach dem Backup / Virus-Scan möglicherweise nicht passieren, aber das System läuft möglicherweise ein wenig langsamer den ganzen Tag lang. Dies ist keine Situation, die auch auf Linux beschränkt ist.

Wenn Sie auswählen, was auf die Festplatte ausgelagert werden soll, versucht das System, Speicher auszuwählen, der nicht tatsächlich verwendet wird - von dem gelesen oder geschrieben wird. Es hat einen ziemlich einfachen Algorithmus zur Berechnung dieses, der die meiste Zeit gut wählt.

Wenn Sie ein System haben, in dem Sie eine riesige Menge an RAM haben (zum Zeitpunkt des Schreibens sind 8 GB eine große Menge für eine typische Linux-Distribution), werden Sie sehr selten eine Situation treffen, in der Swap überhaupt benötigt wird. Sie können sogar versuchen, Swap auszuschalten. Ich empfehle das nie, aber nur, weil Sie nie wissen, wann mehr RAM Sie vor dem Absturz einiger Anwendungen retten kann. Aber wenn du weißt, dass du es nicht brauchst, kannst du tun.

Aber wie kann Swap mein System beschleunigen? Verlangsamen Sie nicht langsame Dinge?

Das Übertragen von Daten vom RAM zum Swap ist ein langsamer Vorgang, aber es wird nur ausgeführt, wenn der Kernel sich ziemlich sicher ist, dass der Gesamtnutzen überwiegen wird. Wenn Ihr Anwendungsspeicher beispielsweise so weit angewachsen ist, dass Sie fast keinen Cache mehr haben und Ihre E / A dadurch sehr ineffizient ist, können Sie sogar viel mehr Geschwindigkeit aus Ihrem System herausholen, indem Sie sogar etwas Speicher freigeben nach den anfänglichen Kosten des Austausches von Daten, um es zu befreien.

Es ist auch ein letzter Ausweg, wenn Ihre Anwendungen tatsächlich mehr Speicher anfordern als Sie tatsächlich haben. In diesem Fall ist ein Auslagern erforderlich, um eine Situation zu vermeiden, in der es zu einem Speichermangel kommt, der häufig dazu führt, dass eine Anwendung abstürzt oder zwangsweise getötet wird.

Swapping ist nur zugeordnet mit Zeiten, in denen Ihr System schlecht läuft, weil es zu Zeiten auftritt, in denen Ihnen nicht mehr genügend RAM zur Verfügung steht, was Ihr System verlangsamen würde (oder es instabil machen würde) Du hattest keinen Tausch. Um die Dinge zu vereinfachen, geschieht das Swapping , weil Ihr System sich festsetzt und nicht umgekehrt.

Sobald Daten im Austausch sind, wann kommt sie wieder heraus?

Das Übertragen von Daten aus dem Swap ist (zumindest bei herkömmlichen Festplatten) genauso zeitaufwendig wie das Einspielen. Verständlicherweise wird Ihr Kernel Daten nur ungern aus dem Swap entfernen, besonders wenn er nicht verwendet wird (dh gelesen oder geschrieben). Wenn Sie Daten im Tausch haben und nicht verwendet werden, ist es eigentlich eine gute Sache, dass sie im Tausch bleibt, da sie mehr Speicher für andere Dinge übrig lässt, die verwendet werden, was möglicherweise Ihr System beschleunigt.

    
thomasrutter 04.07.2012 05:50
quelle
21

Das Einstellen des Swappiness-Wertes funktioniert nicht in jeder Situation. Wenn es für dich funktioniert, großartig. Wenn nicht, habe ich ein Skript geschrieben, um den Austausch regelmäßig zu deaktivieren, indem ich ihn aus- und wieder einschalte.

Swap zu wechseln ist ein bisschen riskant, wenn Sie nicht vorsichtig sind. Wenn Sie nicht genug freien RAM haben, um alles in RAM plus alles im Swap zu halten, wird Ihr System nicht mehr reagieren, wenn Sie versuchen, Swap zu deaktivieren. Mein Skript prüft zuerst, ob es genug freien RAM gibt (was ein wenig zu tun braucht, da die tatsächliche Menge an freiem RAM sich von dem unterscheidet, was free als frei meldet), und tauscht dann nur Swap aus, wenn dies der Fall ist. Wenn Sie jedoch wenig RAM zur Verfügung haben, starten Sie keinen weiteren Hauptprozess, während das Skript ausgeführt wird. Hier ist es:

#!/bin/bash

# Make sure that all text is parsed in the same language
export LC_MESSAGES=en_US.UTF-8
export LC_COLLATE=en_US.UTF-8
export LANG=en_US.utf8
export LANGUAGE=en_US:en
export LC_CTYPE=en_US.UTF-8

# Calculate how much memory and swap is free
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)"

# Do the work
if [[ $used_swap -eq 0 ]]; then
    echo "Congratulations! No swap is in use."
elif [[ $used_swap -lt $total_free ]]; then
    echo "Freeing swap..."
    swapoff -a
    swapon -a
else
    echo "Not enough free memory. Exiting."
    exit 1
fi

Sie müssen dieses Skript als root ausführen (z. B. mit sudo ). Dieses Skript lässt Ihr System nicht mehr reagieren. Wenn Sie nicht genügend Arbeitsspeicher haben, wird es sich weigern, Swap umzuschalten. Ich benutze dieses Skript seit fast fünf Jahren ohne Probleme.

    
Scott Severance 04.07.2012 04:38
quelle
4

Im Allgemeinen wird Swap in den heutigen Systemen nicht verwendet. Meiner Erfahrung nach werden die Prozesse, die lange Zeit ohne intensive Operationen ablaufen, durch den Linux ausgetauscht.
Einige betroffene Programme werden langsam ausgeführt.
Wenn Sie viele RAM frei haben, können Sie den Swap ausschalten, indem Sie den Befehl ausführen:
swapoff -av (Sie benötigen sudo Rechte dafür.)
Wenn Ihnen der Swap-Off nicht gefällt, können Sie ihn mit einem symmetrischen Befehl einschalten:
swapon -av (wieder sudo erforderlich).

    
drake01 30.06.2012 00:24
quelle
3

Wenn Swap einmal für ein Programm verwendet wurde, bleibt es für die Lebensdauer des Programms gemappt. Viele Programme haben Code (und Daten), die selten verwendet werden. Sobald der Speicher ausgelagert ist, ist es unwahrscheinlich, dass er ausgetauscht wird.

Eine Möglichkeit zum Erzwingen dieser Seiten im Speicher besteht darin, das Swap-Gerät auszuschalten. Wenn Sie zwei haben, können Sie einen ausschalten, ihn wieder einschalten und dann den zweiten ausschalten. Wenn Swap wirklich benötigt wird, wird es zwischen den Geräten verschoben. Sie könnten das Swap-Gerät (oder die Datei) einfach ausschalten, aber wenn Sie wirklich Swap-Speicherplatz benötigen, können drastische Dinge passieren.

Neben den normalen Dingen im Speicher verwendet tempfs Swap Space und wird wie der Rest des Speichers ausgelagert. Wenn Sie etwas ausführen, das eine große Menge an temporären Datenträgern benötigt, können Seiten ausgelagert werden. Einmal erstellte temporäre Dateien können nach ein paar Minuten nicht mehr verwendet werden und sind gute Kandidaten, um auf das Swap-Gerät verschoben zu werden.

Im Notfall können Sie eine Datei als Swap-Gerät verwenden. Dies ist nützlich, wenn Sie vorübergehend zusätzlichen Swap-Speicherplatz benötigen.

    
BillThor 30.06.2012 06:02
quelle
2

Ich habe das Skript von Scott Severance bearbeitet, um den neueren Versionen von free zu entsprechen, die bereits ein gesamtes verfügbares Speicherfeld enthalten.

#!/bin/bash

free_mem="$(free | grep 'Mem:' | awk '{print }')"
used_swap="$(free | grep 'Swap:' | awk '{print }')"

echo -e "Free memory:\t$free_mem kB ($((free_mem / 1024)) MiB)\nUsed swap:\t$used_swap kB ($((used_swap / 1024)) MiB)"
if [[ $used_swap -eq 0 ]]; then
    echo "Congratulations! No swap is in use."
elif [[ $used_swap -lt $free_mem ]]; then
    echo "Freeing swap..."
    sudo swapoff -a
    sudo swapon -a
else
    echo "Not enough free memory. Exiting."
    exit 1
fi
    
derberlinersmurf 03.10.2017 15:37
quelle

Tags und Links