Hier die Ausgabe von free -m
:
total used free shared buffers cached
Mem: 7188 6894 294 0 249 5945
-/+ buffers/cache: 698 6489
Swap: 0 0 0
Ich kann sehen, dass fast 6GB
(5945MB) Speicherplatz für 7GB
das Zwischenspeichern der Dateien verwendet wird. Ich weiß, wie man die Caches leert. Meine Frage ist: Ist es möglich zu sehen, welche Dateien (oder Inodes) zwischengespeichert werden?
linux
memory-usage
ssapkota
quelle
quelle
buffers
undcached
:sysctl -w vm.drop_caches=3
. Vielleicht möchten Sie vor der Verwendung mehr darüber lesen. Manchmal ist es nur nötig. Es ist verfügbar - dies sollte ein weiterer Grund sein :)Antworten:
Nun, es gibt eine einfache Möglichkeit, einen Blick auf den Seiten-Cache des Kernels zu werfen, wenn Sie über ftools verfügen. Mit "fincore" erhalten Sie eine Zusammenfassung der Seiten der Dateien, die den Inhalt des Caches darstellen.
Sie müssen eine Liste von Dateinamen angeben, um zu überprüfen, ob sie im Seiten-Cache vorhanden sind. Dies liegt daran, dass die in den Seitencachetabellen des Kernels gespeicherten Informationen nur Datenblockreferenzen und keine Dateinamen enthalten.
fincore
würde die Datenblöcke einer bestimmten Datei durch Inode-Daten auflösen und nach entsprechenden Einträgen in den Seiten-Cache-Tabellen suchen.Es gibt keinen effizienten Suchmechanismus für den umgekehrten Vorgang - um einen Dateinamen zu erhalten, der zu einem Datenblock gehört, müssen alle Inodes und indirekten Blöcke im Dateisystem gelesen werden. Wenn Sie über die Blöcke jeder einzelnen Datei Bescheid wissen möchten, die im Seiten-Cache gespeichert sind, müssen Sie eine Liste aller Dateien in Ihrem Dateisystem (Ihren Dateisystemen) angeben
fincore
. Aber dies würde wahrscheinlich die Messung verderben, da eine große Datenmenge durch die Verzeichnisse gelesen und alle Inodes und indirekten Blöcke abgerufen werden würde - sie werden in den Seiten-Cache gestellt und genau die Seiten-Cache-Daten, die Sie untersuchen wollten, werden entfernt.quelle
fincore
würde die Datenblöcke einer bestimmten Datei durch Inode-Daten auflösen und nach entsprechenden Einträgen in den Seiten-Cache-Tabellen suchen. Es gibt keinen effizienten Suchmechanismus, der das Gegenteil bewirkt. Wenn ein Dateiname zu einem Datenblock gehört, müssen alle Inodes und indirekten Blöcke im Dateisystem gelesen werden. Daher ist es algorithmisch besser, eine Liste aller Dateien in Ihrem Dateisystem bereitzustellen,fincore
wenn Sie diese Informationsstufe wirklich benötigen.Mit dem Dienstprogramm vmtouch können Sie feststellen , ob sich eine benannte Datei oder ein benanntes Verzeichnis im Cache befindet. Sie können das Tool auch verwenden, um Elemente in den Cache zu zwingen oder sie in den Cache zu sperren.
Jetzt kann ich es in den Cache "tippen".
Nun, um zu sehen, wie viel zwischengespeichert ist ...
quelle
Ich schreibe ein sehr einfaches Shell-Skript, um die zwischengespeicherten Dateien mithilfe von Linux-Fincore anzuzeigen. Da der Cache ein Teil des Speichers ist, wird in meinem Code die Top-10-RSZ-Verwendung des Prozesses ermittelt, und mithilfe von lsof werden die Dateien ermittelt, die geöffnet wurden. Verwenden Sie schließlich linux-fincore, um herauszufinden, ob diese Dateien zwischengespeichert sind oder nicht.
Bitte korrigieren Sie mich, wenn ich falsch denke.
quelle
lsof
auch Dateien gemeldet, die dem Prozessadressraum zugeordnet sind (und nicht unbedingt zwischengespeichert werden müssen). Auch wahrscheinlich, dass ein großer Teil der Dateien nur teilweise / spärlich zwischengespeichert wird ...Sie können auch pcstat (Page Cache Stat) https://github.com/tobert/pcstat verwenden
Hoffe es hilft jemandem.
quelle
Ich habe folgendes Skript geschrieben, das alle Dateien und ihren Cache-Status mit dem Befehl pcstat ausgibt. Es ist ein in sich geschlossenes Skript für x86_64-Linux-Systeme. Bei Bedarf wird pcstat heruntergeladen.
Das erste Argument ist der Speicherort des zu analysierenden Dateisystems und das zweite Argument die Anzahl der Ergebnisse (Top N nach Anzahl der Seiten im Cache).
quelle