
Diese FragenListen Sie kurz das Format des Free-Befehls auf und beachten Sie, dass es sich bei Puffern um Kernelspeicher handelt, der auf die Festplatte geschrieben werden muss, und dass es sich bei Cache um Dateidaten handelt, die nicht auf die Festplatte geschrieben werden müssen.
Auf meinem System belegen Puffer, anders als bei den meisten freien Ausführungen, über 10 % des RAM. Normalerweise sind Puffer ein kleiner, fast symbolischer Wert.
Meine Frage ist, was genau befindet sich in dem Bereich namens Puffer? Kann ich mit danach suchen lsof
? Besteht er aus offenen Dateibereichen, die nicht geleert wurden? Handelt es sich um im Speicher abgebildete Dateibereiche? Was ist das?
Das System läuft gut und es wird nur wenig Swap verwendet, die Leistung ist also in Ordnung.
Antwort1
free
bezieht seine Daten von/proc/meminfo
slkwr133701:/usr/src/linux # free
total used free shared buffers cached
Mem: 2053456 434572 1618884 0 77888 201820
slkwr133701:/usr/src/linux # cat /proc/meminfo
MemTotal: 2053456 kB
MemFree: 1618736 kB
Buffers: 77928 kB
....
Dies bezieht sich auf Speicher, der für die temporäre Block-E/A-Speicherung verwendet wird. Der Kernel muss ständig Einheiten derselben Größe zuweisen und freigeben, wie Block-E/A-Übertragungen, Netzwerkpakete und Socket-Puffer.
Sie können einen besseren Überblick über Caches und Pufferzuweisungen erhalten, indem Sie Folgendes ausführen:slabtop
Als Antwort auf Ihre Frage zur Nutzung: Das System weist normalerweise mehr Blöcke zu, als es benötigt, aber wenn der „Speicherdruck“ zunimmt, werden diese zusätzlichen Blöcke freigegeben.
Antwort2
„Puffer“ können bei Speichermangel zurückgewonnen werden. Es ist also ähnlich wie der Seitencache (Spalte „Cache“); kein Grund zur Sorge. Der „Puffer“-Wert kann klein oder groß sein, es hängt davon ab, was Ihr System macht :-). Wir können hier mehrere Arten von Cache finden, die gezählt werden.
Der Puffercache ist buchstäblich der Seitencache für das Blockgerät. Linux meldet diese nur separat.[*] Sie könnten die Verwendung von „Puffer“ bemerken, während Programme den Blockgeräteknoten lesen/schreiben, z. B. dd status=progress if=/dev/sda of=/dev/null
. Anscheinend bemerken es die Leute auch, wenn sie ein DVD-Player-Programm ausführen.
Als Beweis siehe:30 % des RAM sind „Puffer“. Was ist das?
Wenn Sie nicht auf den Blockgeräteknoten zugegriffen haben, sind Ihre "Puffer" wahrscheinlich alle DateisystemMetadaten. Dateisysteme verwenden den Puffercache intern aus praktischen Gründen. Sie stellen sicher, dass die Datei nie dupliziert wird.Daten- Dateiinhalte, die im Hauptseitencache gespeichert werden. Wofür das Dateisystem den Puffercache genau verwendet – wenn überhaupt –, hängt vom Dateisystem ab.
Auf einem Rechner mit wenig physischem RAM ist mir aufgefallen, dass „Puffer“ hoch aussehen können, wenn ich ext3/ext4-Dateisysteme habe. Das lag daran, dass Schreibvorgänge in das Journal durch den Puffercache gehen. (Siehe Link oben.) ext3/4-Dateisysteme speichern auch Verzeichnisinhalte im Puffercache.
Zweitens free
umfassen die vom Befehl angezeigten „Puffer“ auch SReclaimable, also wiederherstellbare Platten. (Hier gezeigt:Noch einmal: Der richtige Weg, den Linux-Speicher zu überwachen).
Plattenspeicher istnichtTeil des Seiten-/Puffercaches. Es ist jedoch praktisch, sie zusammen zu zählen. Sie sind beide wiederherstellbar, und die Hauptverwendung (einzige?) von wiederherstellbaren Slabs ist die Zwischenspeicherung von Dateisystemen. Beispielsweise werden Dateimetadaten (Inodes) und Pfadsuchen (Dentrys) in wiederherstellbaren Slabs zwischengespeichert.Der wiederverwendbare Slab-Speicher [kann] einen großen Teil des Systemspeichers auf überwiegend inaktiven Systemen mit vielen Dateien beanspruchen.."
Sie können die Rohdaten Buffers
und SReclaimable
Werte in sehen cat /proc/meminfo
. Sie können auch ausführen, slabtop
um die Liste der Platten anzuzeigen. Soweit ich weiß, slabtop
werden keine Statistiken darüber bereitgestellt, ob Platten wiederherstellbar sind oder nicht. Aber Sie können es normalerweise erraten, und wenn es eine verdächtige Platte gibt, können Sie sie vermutlich anhand des Namens nachschlagen.
[*] Für die Zwecke dieser Antwort ist „Puffercache“ der Cache, der Buffers
in gezählt wird /proc/meminfo
. Andere Quellen bezeichnen den gesamten Seitencache jedoch möglicherweise als einheitlichen Puffercache. Wenn Sie die historische Erklärung wünschen, sehen Sie sich den ersten Link an.
Außerdem haben Linux-Entwickler den Begriff „Puffercache“ möglicherweise in unterschiedlicher Bedeutung verwendet, als sie sich über die Implementierung von Dateisystemen stritten.
Antwort3
Zweitens umfassen die vom Befehl free angezeigten "Puffer" auch SReclaimable
Laut Manpage des Free-Befehls (Version 3.3.15): „Cache: Vom Seitencache und den Slabs verwendeter Speicher (zwischengespeichert und SReclaimable in /proc/meminfo)“
Es ist also der Cache, der SReclaimable enthält, nicht die Puffer.