Speicher ist frei, aber immer noch austauschen?

7

Ich bin mir sicher, dass dies eine ziemlich grundlegende Frage ist, aber ich versuche nur zu verstehen, was mit meinem Ubuntu Hardy-Server los ist, auf dem eine Rails-basierte Site ausgeführt wird. Es scheint, dass ich freien Speicher zur Verfügung habe, aber das System meldet, dass es immer noch Speicher austauscht (es sei denn, ich lese dies falsch?).

Hier ist die free -mAusgabe

              total       used       free     shared    buffers     cached
Mem:          1024        905        118          0         33        409
-/+ buffers/cache:        462        561
Swap:         2047         95       1952

Könnte mir jemand einige mögliche Gründe erklären, warum es immer 95 MB Swap aufrechterhält (es ist nie weniger)? Ich suche nur nach Hinweisen zu Dingen, die ich überprüfen könnte und die mir genau erklären würden, wie Speicher unter Linux verwendet wird.

Orokusaki
quelle

Antworten:

10

Ich war in einer Klasse, die von Ted Ts'o unterrichtet wurde, und die Art und Weise, wie er es mir erklärte, als ich dieselbe Frage stellte, war wie folgt ...

Standardmäßig reserviert der Kernel den größten Teil des Speichers zum Zwischenspeichern von Dateisystem-Metadaten. Aus diesem Grund zeigt Ihre "gebrauchte" Spalte 905 MB an. Das ist der gesamte Speicher, der "verwendet" wird, dh von Programmen und vom Cache. Die tatsächliche Menge an freiem Speicher befindet sich in der Spalte "frei" neben "- / + Puffer / Cache", dh 561 MB. Das ist die Menge, die für Programme zur Verfügung steht.

Da der Kernel nun 462 MB für den Cache verwendet, sind 118 MB vollständig verfügbar. Wenn ein Programm dem Kernel sagt: "Hey, ich brauche JETZT 50 MB Speicher!", Zieht der Kernel den Speicher aus diesem "freien" Pool. Das macht den "freien" Pool auf ungefähr 68 MB, was für den Komfort zu klein ist. Nachdem dieser Speicher belegt ist, wird die Menge des im Cache gespeicherten Materials verringert und der "freie" Pool wird wieder hochgefahren.

Aber was passiert, wenn ein Programm ein Schwein ist und sagt "Ich brauche sofort 120 MB Speicher!". Sie haben nicht so viel "freien" Speicher, so dass der Kernel ihn nicht einmal vorübergehend an das Programm weitergeben kann, sodass der Kernel in swap gräbt, gerade lange genug, um genügend freien Speicher zuzuweisen, um dem Programm das zu geben, was es benötigt. Dann werden genügend Cache-Daten freigegeben, damit der "freie" Speicher wieder auf ein komfortables Niveau zurückkehren kann.

Durch den Abrechnungsprozess werden die Daten im Swap nicht sofort aus dem Swap freigegeben, obwohl es sich um zwischengespeicherte Daten handelt. Der Swap-Speicher wird nur verwendet, wenn etwas die Metadaten (oder die zwischengespeicherten Informationen) anfordert, die in diesem kleinen Swap-Segment gespeichert sind. Es schadet also nicht, es zu verlassen.

Wenn es Sie stört, können Sie "Swapoff" und dann "Swapon" ausführen, um es loszuwerden, aber es tut nichts weh.

Matt Simmons
quelle
Tolle Erklärung!
Antoine Benkemoun
9

Die Speicherverwaltung ist sehr komplex. Der Linux-Kernel von O'Reilly enthält viele Details.

Die Idee ist jedoch, dass Sie Speicher austauschen können, der wahrscheinlich nie wieder proaktiv verwendet wird. Sie können steuern, wie wahrscheinlich der Swap mit einem Wert zwischen 0 und 100 Zoll verwendet wird /proc/sys/vm/swappiness. Eine höhere Zahl bedeutet, dass die Wahrscheinlichkeit eines Austauschs höher ist.

Bevor Sie anfangen, sich damit zu beschäftigen, überprüfen Sie anhand der si / so-Spalten von , ob der Swap aktiv verwendet wird vmstat 3. Wenn diese 0 bleiben, wurde ein Austausch durchgeführt, aber derzeit findet kein Austausch statt. In diesem Fall empfehle ich, ihn zu belassen :-) Ein Grund dafür ist, dass die zwischengespeicherten Dateien, über die Sie kostenlos informiert wurden, möglicherweise nützlich sind Erinnerung. Lassen Sie nicht zu, dass nutzloser Prozessspeicher ausgetauscht wird, und Sie verpassen möglicherweise die Möglichkeit, einige Dateien zwischenzuspeichern, die zum Zwischenspeichern nützlich wären.

Kyle Brandt
quelle
Vielleicht möchten Sie 0 für Swappiness versuchen, wenn Sie das Gefühl haben, jemanden zu ermorden, wenn Sie jeden Morgen auf Firefox warten müssen, um diese Erinnerung wiederzuerlangen :-)
Kyle Brandt
Es gibt auch vm.vfs_cache_pressure. Ich persönlich finde die VM von Linux im Vergleich zu BSD oder Solaris immer noch schrecklich.
Poige
3

Wenn Sie 95 MB Programmdaten haben, auf die seit einer Stunde nicht mehr zugegriffen wurde, was würden Sie lieber tun:

1) Verschwenden Sie 95 MB physischen Speicher mit Daten, auf die möglicherweise niemals zugegriffen werden kann.

2) Tauschen Sie diese 95 MB auf die Festplatte aus und verfügen Sie über zusätzliche 95 MB freien physischen Speicher.

Das System wählt vernünftigerweise Option 2 aus.

Auf vielen Systemen erhalten Sie in der Regel eine mäßige Menge an Speicher dieser Art. Eine häufige Ursache sind Programme, die beim Start Speicher zuweisen und dann auf Anforderungen warten, die nie eintreffen. Viele Linux-Systeme verfügen über ein halbes Dutzend Serverprogramme, die ausgeführt, aber nie verwendet werden.

David Schwartz
quelle