Frage Warum wird Tausch verwendet, obwohl ich viel freien RAM habe?


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


183
2018-06-29 22:16


Ursprung


Bitte teilen Sie den Inhalt oder die Ausgabe der folgenden Befehle / Dateien, damit wir Ihr Problem besser beheben können (Anweisungen in dieser Antwort): free -m, top -b 1 - ish
Wird die Frage morgen mit Pastebins dieser Befehle aktualisieren. Es ist jetzt 12 Uhr :( - Mysterio
Ich sollte den Titel bearbeiten, um hinzuzufügen "... aber ich bin zu müde, um mich jetzt zu kümmern, damit ihr auch ein Nickerchen macht": P - ish


Antworten:


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

Von dem Ubuntus Swap-FAQ:

Was ist Swappiness und wie ändere ich es?

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

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 von 60 ist wahrscheinlich besser geeignet.

Um den Swappiness-Wert zu prüfen

cat /proc/sys/vm/swappiness

Um den Swappiness-Wert zu ändern Eine vorübergehende Änderung (verloren beim Neustart) mit einem Swappiness-Wert von 10 kann mit vorgenommen werden

sudo sysctl vm.swappiness=10

Um eine Änderung dauerhaft zu machenBearbeiten 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 wie folgt am Ende der Datei hinzu:

vm.swappiness=10

Speichern Sie die Datei und starten Sie sie neu.

Sie können auch auschecken: https://askubuntu.com/a/103916/54187


160
2018-06-29 23:10



Leerlaufspekulation: Dies könnte für die Performance von Vorteil sein - Seiten, auf die seit einiger Zeit nicht zugegriffen wurde, können in Auslagerungsspeicher kopiert werden, wodurch das Betriebssystem sie schnell löschen kann, wenn Speicher benötigt wird. Der Seiteninhalt bleibt jedoch im Speicher . - Simon Richter
@SimonRichter Ja das ist die Idee. Die Swappiness von 60 ist jedoch auf modernen Systemen wahrscheinlich zu aggressiv, da das bedeutet, dass Sie anfangen, sich auszutauschen, wenn Sie noch einige Gigs an freiem Speicher haben. - Brendan Long
Lauf sudo sysctl --load=/etc/sysctl.conf Bearbeiten Sie die Datei, um die Änderungen zu übernehmen - deFreitas


Ihre Frage hat verschiedene Aspekte.

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 verwendet (sehr vereinfacht)

Jede Anwendung kann einen Teil Ihres Speichers nutzen. Linux verwendet alle sonst unbesetzten Erinnerungen (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 verfügen Sie über genügend Speicher für alle Ihre Anwendungen, und Sie haben immer noch mehrere hundert MB für den Cache. Solange Ihre Anwendungen die Speicherbelegung nicht erhöhen und das System nicht darum bemüht ist, genügend Speicherplatz für den Cache zu erhalten, ist in diesem Fall kein Swap erforderlich.

Sobald Anwendungen mehr RAM beanspruchen, wird einfach ein Teil des Speicherplatzes belegt, der vom Cache verwendet wurde, wodurch der Cache verkleinert wird. 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 Ich musste innerhalb der nächsten Sekunden auf die Festplatte spülen sowieso.

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

Wenn Sie über freien RAM sprechen, ist es viel sinnvoller einschließen Cache, weil es praktisch kostenlos ist - es ist verfügbar, sollte es von einer Anwendung angefordert werden. Unter Linux ist das free Der Befehl meldet 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 neu zuzuweisen, 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 aufwachsen (wie z über Nacht Backup) ausführen. 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 auswählt.

Wenn Sie ein System mit einer großen 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 Sie wissen, dass Sie es nicht brauchen werden, Sie kann TU es.

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

Die Übertragung von Daten vom RAM zum Austausch ist eine langsame Operation, aber sie wird nur durchgefü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 freizugeben.

Es ist auch ein letzter Ausweg, sollten Ihre Anwendungen tatsächlich anfordern Mehr Erinnerung, als Sie tatsächlich haben. In diesem Fall ist ein Auslagern erforderlich, um eine Situation zu verhindern, in der es zu wenig Speicher gibt, was oft dazu führt, dass eine Anwendung abstürzt oder zwangsweise getötet wird.

Swapping ist nur damit verbundenen mit Zeiten, in denen Ihr System schlecht arbeitet, 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), selbst wenn Sie keinen Swap hatten. Um die Dinge zu vereinfachen, geschieht das Swapping weil Ihr System wird festgefahren und nicht umgekehrt.

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

Das Übertragen von Daten aus dem Austausch ist (zumindest für herkömmliche Festplatten) genauso zeitaufwendig wie das Einbringen von Daten. 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 es nicht verwendet wird, dann ist es eigentlich eine gute Sache, dass es im Tausch bleibt, da es mehr Speicher für andere Dinge übrig lässt sind verwendet werden, möglicherweise beschleunigt Ihr System.


83
2017-07-04 03:50



+1 für detaillierte Erklärung. Ich möchte auch 2GiB tauschen auf meinen Computern. Wenn etwas schief geht - Speicherlecks usw., dann können Sie sehen, dass der Tausch nach oben geht und nach dem Problem sucht, bevor nicht genügend Speicher vorhanden ist. Es ist ein Sicherheitsnetz sowie ein Performance-Tool. - Joe
Auf meinem Netbook, das nur 2 GB RAM hat, halte ich 4GB Swap. Das ist, weil ich das Netbook für viel mehr verwende, für das es bestimmt war, und meine Programme erfordern häufig mehr als 2 GB Speicher. Da sich Linux in Situationen mit wenig Arbeitsspeicher sehr schlecht verhält, bevorzuge ich ein großes Sicherheitsnetz. Und ich habe viel Speicherplatz. - Scott Severance
Wenn Ihre Programme häufig mehr als 2 GB Speicher benötigen, würde ich mir überlegen, mehr RAM hineinzuschieben (es ist extrem billig!), Weil der erschöpfende RAM-Speicher die Leistung beeinträchtigt. Zum Vorteil anderer Leser: Machen Sie, dass Sie nicht nur auf den Cache-Speicher schauen, der ist soll verfügbaren RAM zu hoggen - siehe andere Referenzen zu free -m. - thomasrutter
@neon_overload: Ich sollte nur erwähnen, dass laut HP der maximale Arbeitsspeicher meines Netbooks 1 GB beträgt. Ich habe jetzt 2GB drin, und Internet-Quellen deuten darauf hin, dass 2 GB das tatsächliche Maximum ist. Daher die Notwendigkeit für diese Art von Workarounds. - Scott Severance
@thomasrutter: Wie ändert sich deine Antwort für große Server, einer von mir hat 1TB (ja ein volles Terabyte) von ram und benutzt immer noch swap; Welche Swappiness-Einstellung und welche Größe Swap-Partition würdest du empfehlen? - chrisinmtown


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.

Toggle Swap ist ein wenig riskant, wenn Sie nicht vorsichtig sind. Wenn Sie nicht genug freien RAM haben, um alles im RAM zu halten Plus Wenn Sie alles austauschen, wird der Versuch, den Austausch zu deaktivieren, dazu führen, dass Ihr System nicht mehr reagiert. Mein Skript prüft zuerst, ob es genug freien RAM gibt (was ein wenig Aufwand erfordert, da die tatsächliche Menge an freiem RAM sich von der unterscheidet free Berichte als frei), schaltet dann nur Swap wenn ja. 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 $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)"

# 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.


21
2017-07-04 02:38



+1 für das Skript Vielleicht möchten Sie es ein wenig modernisieren, indem Sie in den Ausgaben MB zu MiB ändern. Ich habe ein ähnliches Skript ohne all die (guten) Sicherheitstests geschrieben. Auf meinem alten Notebook, wo der Swap stark benutzt wurde, würde es eine Weile dauern, bis er lief - ein oder zwei Minuten, aber tat nichts weh. Hin und wieder scheiterte es, weil nicht genug freier Speicher für den Betrieb zur Verfügung stand, aber das verursachte keine zusätzlichen Probleme. Ich musste neu starten, um Dinge zu klären, als das passierte. Es hatte mit etwas zu tun, das wie ein Speicherleck in Transmission aussah (seit ich festgenommen hatte) und nur 2GiB Ram hatte. - Joe
Wenn etwas zum Tausch bewegt wurde und es im Tausch bleibt, ist das normalerweise eine gute Sache - es bedeutet, dass die Daten nicht wirklich verwendet werden, und es hat etwas von Ihrem RAM für andere Sachen freigegeben, was zu einer möglichen Steigerung der Geschwindigkeit führt. Was hat Sie dazu gebracht zu glauben, dass diese Daten nicht im Austausch sein sollten und stattdessen mehr wertvolles RAM benötigen? Normalerweise ist der Kernel ziemlich gut zu wissen, was ungenutzt ist und was sicher in Swap bleiben kann, um RAM freizugeben. - thomasrutter
@neon: Bedenke, dass meine Maschinen 2 GB bzw. 3 GB RAM haben, was heutzutage ziemlich wenig ist. Der Beweis ist in der Leistung. Zum Beispiel kann das Aufrufen von Menüs oder das Wechseln von Programmen aufgrund des Austauschens langsam sein, ebenso wie die visuellen Effekte von Compos. Diese Langsamkeit wird durch Umschalten des Swaps behoben, was zeigt, dass zumindest in einigen Situationen die Optimierungsalgorithmen des Kernels nicht optimal sind. Ich kann nicht mit wiederholten Erfahrungen argumentieren. - Scott Severance
Puh!! Dies hat sich nur auf 0% des Tauschs erhöht ... Ich hatte nicht viel Zeit, um diese vollständige Frage und ihre Antwort zu lesen, aber ich bevorzugte es zu lesen, wenn ich etwas Freizeit habe. - AzkerM
Warum sollten Sie Swappiness nicht auf einen niedrigen Wert setzen? Das scheint dasselbe zu tun wie dein Skript, aber auf eine viel kontrolliertere Weise. - jhfrontz


In der Regel wird Swap in 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 viel RAM frei haben, können Sie den Swap ausschalten, indem Sie den folgenden Befehl ausführen:
swapoff -av (Du brauchst sudo Rechte dafür.)
Wenn Sie die Auslagerung nicht mögen, können Sie sie mit einem symmetrischen Befehl einschalten:
swapon -av (nochmal sudo erforderlich).


4
2018-06-29 22:24



Swapping vollständig zu deaktivieren ist Overkill, da Swapiness = 0 dasselbe tut, aber sicherer (wenn du machen am Ende mit zu viel Zeug im Speicher, wird es etwas in swap) werfen. - Brendan Long
@ BrendanLong Messepunkt .. Danke für das Unterrichten. :) - drake01


Sobald Swap für ein Programm verwendet wurde, bleibt es für die Lebensdauer des Programms reserviert. 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, diese Seiten in den Speicher zu zwingen, 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önnen 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.


3
2018-06-30 04:02





Ich habe bearbeitet das Skript von Scott Severance passend zu den neueren Versionen von free, die bereits ein verfügbares Gesamtspeicherfeld enthalten.

#!/bin/bash

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

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

2
2017-10-03 13:37