Löschen des zwischengespeicherten Speichers in / proc / meminfo ohne drop_caches

9

Ich habe ein eingebettetes System mit 2.6.10 linux kernel (ich weiß!) und mir ist aufgefallen, dass, wenn das System länger läuft, die "Cache" -Ausnutzung von RAM - wie in / proc / meminfo - steigt linear an. Manchmal erreicht es bis zu 70% des gesamten RAM und das System stürzt ab.

  1. Ich weiß nicht, warum dieser Space nicht automatisch vom Kernel bei wenig Speicher beansprucht wurde. Ich dachte, dass die "gecachte" Erinnerung, obwohl sie benutzt wird, immer noch als "verfügbar" betrachtet wird.

  2. Um diesen Speicherplatz manuell wieder freizugeben, müsste ich die Einstellung drop_caches in / proc / sys / vm / anpassen. Diese Funktion wurde jedoch nur im Kernel 2.6.16 eingeführt.

Da ein großer Teil dessen, was sich in "cached" befindet, die Seitencache-, Datei- und Inode-Caches sind, gibt es eine Möglichkeit, sie ohne die Funktion drop_caches wiederherzustellen? Ich habe versucht, sync , aber das hat überhaupt nicht geholfen.

Ich habe viel darüber gegoogelt, konnte aber keine Ressourcen finden, die nicht irgendwie auf die Funktion drop_caches angewiesen sind.

BEARBEITEN:

Nach einem Rat von ein paar anderen Threads , habe ich einen Test durchgeführt, dass Ich schreibe alle Sekunden auf die Onboard-Flashpartition und sehe, dass sowohl die Felder dentry als auch size-64 in /proc/slabinfo nach oben gehen (mit einer Rate von 1 pro Schleife des Bash-Skripts). Ich habe jedoch keinen Anstieg der Cached Speicherbelegung bemerkt.

MEHR INFO:

Ich muss erwähnen, dass das Root-Verzeichnis selbst in ramfs ist. Ich habe einen Flash-Chip, von dem wir lesen / schreiben, aber zu oft. Ich habe die Meminfo und Slabinfo eingefügt, die ich vor dem Absturz gemacht habe. Beachten Sie, dass die aktiven und zwischengespeicherten Felder größer als der gesamte verfügbare Speicher sind!

%Vor%     
Ram 30.01.2017, 23:09
quelle

1 Antwort

2

Ich glaube, du hast einen tmpfs / ramfs irgendwo aufgefüllt. Aufgrund der Funktionsweise von tmpfs / ramfs wird der von Dateien auf einem tmpfs verwendete Speicherplatz vom Linux-Kernel als "Cache" gezählt. Eine Datei auf einem tmpfs / ramfs ist im Grunde nichts mehr als ein nicht gesicherter Cache-Eintrag.

%Vor%

Dies ist "Cache" -Speicher, den Linux nicht automatisch zurückfordern kann, da er nicht von einem echten persistenten Speicher unterstützt wird. Wie Sie im Beispiel sehen können, würde auch drop_caches Ihnen nicht helfen.

Schauen Sie sich in /proc/mounts für alle tmpfs / ramfs an, die gemountet sind und überwachen Sie, welche davon gefüllt sind.

    
aferber 08.02.2017 11:06
quelle