(Es ist wahrscheinlich ein bisschen spät für das OP, aber das wird ziemlich oft gefragt, also werde ich es versuchen)
free
zeigt normalerweise so etwas an:
total used free shared buffers cached
Mem: 8195284 8137708 57576 0 1232328 2651156
-/+ buffers/cache: 4254224 3941060
Swap: 18892216 759852 18132364
Die Leute neigen dazu, auf die Mem:
zu schauen Linie, wenn Sie versuchen, herauszufinden, wie viel freier Speicher sie haben. Leider ist diese Zeile ziemlich irreführend, da der Linux-Kernel versucht, den verfügbaren Speicher (mindestens) auf folgende Weise optimal zu nutzen:
-
Es speichert Daten vom E/A-Subsystem (z. B. der Festplatte), sodass sie bei Bedarf sofort verfügbar sind.
-
Prozesse, die für einige Zeit inaktiv waren, werden aktiv in den Auslagerungsspeicher verschoben, um Daten für aktive Prozesse zwischenzuspeichern. Dies tendiert dazu, den Durchsatz gegenüber der Reaktionsfähigkeit zu bevorzugen, also stimmen einige Leute ihren Kernel ab, um dieses Verhalten zu ändern.
Der erste Punkt ist die Quelle der Verwirrung bezüglich free
, weil die Mem:
Zeile beinhaltet den für das Caching verwendeten Speicher in der verwendeten Speichermenge. Der Kernel wird jedoch aus Leistungsgründen so viel wie möglich zwischenspeichern. Tatsächlich tendiert der freie Speicher auf jedem Linux-System, das eine Zeit lang in Betrieb war, dazu, nahe Null zu sein - ungenutzter Speicher ist verschwendeter Speicher.
Der Cache-Speicher kann jedoch vom Kernel freigegeben werden, wenn er von einem anderen Prozess benötigt wird. Dies wirkt sich zwar bis zu einem gewissen Grad auf die E/A-Leistung aus, andere Prozesse können jedoch ohne Verwendung des Auslagerungsbereichs mehr Arbeitsspeicher haben . Daher ist dieser Speicher für die meisten Absichten und Zwecke frei .
Deshalb free
enthält eine zweite Zeile, in der der Cache-Speicher als frei gilt:
-/+ buffers/cache: 4254224 3941060
Auf diese zweite Zeile sollten Benutzer achten, wenn sie wissen möchten, ob sie für einen bestimmten Zweck über genügend freien Speicherplatz verfügen.
Im obigen Beispiel gemäß Mem:
line gibt es ~57 MB freien Speicher. Liest man aber die zweite Zeile, sind es tatsächlich ca. 3,9 GB die verwendet werden können, ohne dass aktive Prozesse ausgetauscht werden müssen. Als Nebenbemerkung gibt es auch etwa 760 MB selten genutzter Daten, die ausgelagert wurden, um mehr Platz im Hauptspeicher für Prozesse und Caching zu schaffen.
Ungefähr zur gleichen Zeit wird der Inhalt von /proc/meminfo
:
MemTotal: 8195284 kB
MemFree: 57660 kB
Buffers: 1232352 kB
Cached: 2651156 kB
SwapCached: 119936 kB
.
.
.
MemTotal
:der vom Kernel erkannte verfügbare physische Speicher.
MemFree
:der ungenutzte physische Speicher - der freie Speicher, der in Mem:
angezeigt wird Zeile von free
.
Buffers
:relativ temporäre Speicherung von Rohplattenblöcken.
Cached
:In-Memory-Cache für Dateien, die von der Festplatte gelesen werden. SwapCached-Speicher ist nicht enthalten.
SwapCached
:Speicher, der einmal ausgelagert und dann wieder eingelagert wurde, sich aber immer noch im Auslagerungsbereich befindet. Bei Bedarf kann der Inhalt einfach verworfen werden (sehr schnell!), ohne ihn austauschen zu müssen (langsamer).
Also, um eine halbgenaue Schätzung des tatsächlich verfügbaren Speichers zu haben
MemFree + Buffers + Cached + SwapCached
ist ein guter Ausgangspunkt - und zwar die free
zeigt in dieser zweiten Zeile.
Komplizierter sind natürlich die Speicherverwaltung und die damit verbundenen Statistiken und Messungen. Die von free
angezeigten Zahlen sind bestenfalls nur Schätzungen, da es viele andere Variablen zu berücksichtigen gilt, wenn Sie tiefer gehen möchten. Für Leute, die regelmäßig Speichernutzungsoptimierungen durchführen, ist dies fast eine Kunstform.
BEARBEITEN:
Ein etwas humorvoller Link zu diesem "Problem":
http://www.linuxatemyram.com/
BEARBEITEN 2:
Um den Kommentar zu bestätigen, dass die Speichernutzungsanalyse fast eine Kunstform ist:
Sogar free
verpasst einen großen Teil der zwischengespeicherten Daten auf modernen Linux-Systemen. Ab /proc/meminfo
auf meinem System:
SReclaimable: 2253576 kB
Das sind ungefähr 2 GB Speicher, der vom System-Slab-Allocator zum Zwischenspeichern von Verzeichniseinträgen und dergleichen verwendet wird, und er ist zurückgewinnbar (d. h. er kann gelöscht und bei Bedarf von Prozessen verwendet werden). Dennoch free
betrachtet es nicht als Cache-Speicher und geht in keine seiner Berechnungen ein und wird daher als verwendeter Speicher angezeigt.
Die slabtop
Dienstprogramm, sofern verfügbar, ermöglicht es dem Systemadministrator, herauszufinden, wofür der Slab-Cache verwendet wird.
Eine Möglichkeit (nur für den Root-Benutzer), free
zu haben zeigt die tatsächliche Speichernutzung des Systems an:
# swapoff -a
# sync
# echo 3 > /proc/sys/vm/drop_caches
# free
total used free shared buffers cached
Mem: 8195284 3181468 5013816 0 8656 228832
-/+ buffers/cache: 2943980 5251304
Swap: 0 0 0
# swapon -a
Der erste Befehl deaktiviert den Auslagerungsbereich. Es sollte nicht ausgegeben werden, wenn der verfügbare Speicher möglicherweise nicht ausreicht, um die ausgelagerten Daten aufzunehmen - in diesem Fall muss der Swap:
berücksichtigt werden freie Zeile in ihren Berechnungen zur Speichernutzung.
Der zweite Befehl schiebt alle gepufferten Daten auf die Festplatte. Dadurch kann im nächsten Schritt mehr Cache-Speicher freigegeben werden.
Der dritte Befehl ist der wichtigste des Satzes – er zwingt den Kernel, so viele Cache-Daten wie möglich zu verwerfen (Seiten-Cache, Verzeichniseinträge, Inodes usw.).
Dann free
zeigt schließlich, was die laufenden Prozesse tatsächlich in seinem -/+ buffers/cache:
verwenden Linie. Es ist ziemlich auffällig, dass der Kernel selbst nach dem Löschen aller gecachten Daten schnell wieder mit dem Caching beginnt - in diesem Fall hat er innerhalb weniger Sekunden bereits fast 250 MB gecachte Daten erreicht.
Der letzte Befehl aktiviert den Swap Space wieder - es ist nur notwendig, wenn der erste Befehl auch verwendet wurde.
Es sollte beachtet werden, dass diese Befehle vom Root-Benutzer ausgeführt werden sollten, um die erforderlichen Privilegien zu haben.