GNU/Linux >> LINUX-Kenntnisse >  >> Linux

Woher wissen Sie, ob genügend Speicher frei ist, um eine neue Anwendung auf einem Linux-Computer bereitzustellen?

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


Linux
  1. So löschen Sie den Speichercache in Linux

  2. Wie man Linux herunterfährt oder neu startet

  3. So fügen Sie Arbeitsspeicher, vCPU und Festplatte zu einer virtuellen Linux-KVM-Maschine hinzu

  4. Wie protokolliere ich den Speicherverbrauch unter Linux?

  5. Woher weiß ich, ob ein Remote-Computer Windows oder Linux verwendet?

Linux Free Command (Speichernutzung prüfen)

So installieren Sie Windows 10 in Virtualbox unter Linux

So löschen Sie den Auslagerungsspeicher unter Linux

Wie erstelle ich eine neue virtuelle Maschine auf Proxmox?

So deaktivieren Sie Swap dauerhaft unter Linux

kostenlose Befehlsbeispiele in Linux