Warum meldet Red Hat Linux weniger freien Speicher auf dem System als tatsächlich verfügbar ist?

9

Ich habe einen relativ kleinen Red Hat Linux-Heimserver (ca. 8 GB RAM). Ich benutze es nur zum Ausführen einiger selbst entwickelter Apps, um verschiedene Dinge im Auge zu behalten. Die einzigen wirklichen Dinge, die auf der Box laufen, sind eine Datenbank und ein Webserver.

Ich habe festgestellt, dass beim Überprüfen von Systemzählern mit Tools wie NMON und TOP der gesamte freie Systemspeicher relativ niedrig ist (in der Größenordnung von einigen hundert MB), während der aktive Speicher für die Datenbank und den Webserver immer noch niedrig ist (nur) verbrauchen kombinierte 3 GB). Selbst wenn alle anderen laufenden Prozesse einbezogen werden, beträgt der insgesamt verbrauchte Speicher weniger als 4 GB.

Warum meldet Red Hat Linux weniger freien Speicher als den Gesamtspeicher abzüglich der Gesamtsumme des verwendeten Speichers laufender Prozesse?

Aaron K.
quelle

Antworten:

19

Verwechseln Sie freien Speicher nicht mit nicht verwendetem Speicher. Freier Speicher ist in der Unix-Welt eine Seite des physischen Speichers, der keine logischen Daten zugeordnet sind. Dem nicht verwendeten Speicher sind einige Daten zugeordnet, die derzeit jedoch von einem laufenden Prozess nicht aktiv verwendet werden.

% free -m
             total       used       free     shared    buffers     cached
Mem:           997        942         55          0         71        366
-/+ buffers/cache:        504        492
Swap:         2015        618       1397

Linux (und alle Unix-Betriebssysteme) versuchen, so wenig freien Speicher wie möglich zu haben. Stattdessen verwenden sie Speicher, der nicht aktiv Prozessen im laufenden Betriebssystem zugeordnet ist, beispielsweise für Datei-Cache und Puffer für verschiedene E / A-Übertragungsvorgänge.

Etwas anderes, das Sie verwirren kann, ist, dass Sie den von allen laufenden Prozessen verwendeten Speicher nicht einfach addieren können, um einen Gesamtwert für den verwendeten Speicher zu erhalten. Wenn Sie dies versuchen, werden Sie schnell feststellen, dass Ihre Anwendungen anscheinend mehr Speicher belegen, als tatsächlich auf dem Computer vorhanden ist. Dies hat zwei Gründe

  1. Der Speicher kann durch Copy-On-Write- Speicherzuordnung, speicherabgebildete E / A und gemeinsam genutzte dynamische Bibliotheken von verschiedenen Prozessen gemeinsam genutzt werden .
  2. Dem Betriebssystem steht es frei, der Anwendung mehr Speicher zu versprechen, als es tatsächlich bereitgestellt hat. Die Theorie besagt, dass die meisten Anwendungsschreiber es vorziehen, große Speichermengen auf einmal anzufordern, um Overhead zu vermeiden, und möglicherweise nicht den gesamten Speicher verwenden.

Es gibt einen kürzlich erschienenen Artikel auf lwn.net, der dieses Problem behandelt .

Dave Cheney
quelle
1
Eine einfache Erklärung finden Sie auch hier: linuxatemyram.com
Steven T. Snyder
4

Linux speichert Dateisystemzugriffe aktiv im Speicher zwischen, um schnellere Datenträgerzugriffszeiten zu ermöglichen. Es gibt keinen Grund zur Sorge.

Wenn Sie free -m auf der Box ausführen, erhalten Sie eine bessere Vorstellung davon, wo Speicher verwendet wird.

Unten ist die Ausgabe aus einer meiner Boxen. Der freie Speicher beträgt 147 MB, wobei fast 4 GB für Dateisystemzugriffsanforderungen zwischengespeichert werden.

free -m
             total       used       free     shared    buffers     cached
Mem:          6035       5888        147          0         77       4116
-/+ buffers/cache:       1693       4341
Swap:         4722          0       4722
Ryaner
quelle
1

Schließen Sie auch die Felder "gepuffert" und "zwischengespeichert" ein?

jj33
quelle
1

Schauen Sie sich unter Linux Committed_AS in / proc / meminfo an. Dies ist die Speichermenge (real + swap), die der Kernel tatsächlich versprochen hat, um Prozesse auszuführen.

Linux verwendet sehr effizient Speicher, alle Blöcke nicht bis zu einem gewissen Prozess versprochen wird verwendet , vor kurzem / häufig verwendete Dateien zwischenzuspeichern. Daher ist es typisch für Linux, dass 90% des gesamten verfügbaren physischen Speichers nicht lange nach dem Start verwendet werden.

Schauen Sie sich an, was der Kernel sich zur Bereitstellung verpflichtet hat. Und schmutzige (Swap-) Nutzung, dies gibt Ihnen ein besseres Gesamtbild.

Wenn Sie dieses Verhalten anpassen müssen, aktualisieren Sie bitte Ihre Frage :)

Dies ist das Standard-MO für Linux. Einige Distributionen passen die Speicherverwaltung über sysctl an ihre Bedürfnisse an. Was Sie berichten, ist jedoch unter allen ziemlich typisch.

Tim Post
quelle
1

Welche Art von Kernel führen Sie auf dem System aus? Ein 32-Bit-Kernel meldet nur etwa 3,6 GB Speicher, sofern er nicht mit aktiviertem PAE kompiliert wurde.

Wenn dies eine moderne Version von Redhat Enterprise Linux (oder CentOS) ab Version 3 ist, wird dies vom Standard-32-Bit-Kernel aktiviert.

Wenn Sie die Ausgabe des oben beschriebenen Befehls 'free' veröffentlichen könnten, könnten wir sehen, ob dies das Problem ist oder nicht.

Mike Pountney
quelle