Skip to main content

Speichercaches leeren

Wer mehr über die Speicherverwaltung unter Linux wissen will, sollte sich dieses Buch zu Gemüte führen

Über Sinn und Unsinn dieser Funktion (also das Leeren der Speichercaches) läßt sich streiten, da sie eigentlich fürs Debugging und Programmieren gedacht ist. Jedenfalls bietet der 2.6er Kernel die Möglichkeit Speichercaches des Filesystems zu leeren. Vor dem leeren der Caches sollte 'sync' ausgeführt werden. Folgende Möglichkeiten gibt es:

pagecache leeren (Pages, die über einen Eintrag auf der Festplatte verfügen, werden im schnellen RAM vorgehalten):

echo 1 > /proc/sys/vm/drop_caches

dentrie- und inode-cache leeren (mit deren Hilfe wird ein Dateisystem im Speicher abgebildet):

echo 2 > /proc/sys/vm/drop_caches

page-, dentrie- und inode-cache leeren:

echo 3 > /proc/sys/vm/drop_caches

Das top-Tool zeigt diese speziellen Caches nicht gesondert an, aber im htop kann man schön sehen wieviel gerade belegt ist (die Anzeige beim Speicher, h drücken für die Hilfe). Viel Sinn den Cache auf einem Produktivsystem zu leeren machts nicht. Ich vermute sogar eher das Gegenteil, da ja Seiten, die vorher im Cache lagen, bei erneutem Zugriff wieder von der langsamen Platte geholt werden müssen. Und wenn das Betriebssystem den Speicher, der momentan durch den Cache belegt ist, wieder benötigt holt es sich den schon alleine. Aber zumindest wird dann wieder viel freier Speicher im top angezeigt und der Kunde ist beruhigt ;)

Über die Sysctl-Einstellung vm.vfs_cache_pressure läßt sich konfigurieren, wie oft bzw. ab wann der Kernel sich Speicher aus diesen Caches zurückholt. Der Standardwert ist 100. Stellt man einen niedrigeren Wert ein, holt sich der Kernel nicht mehr so viel Speicher zurück. Beim Wert 0 wird gar kein Speicher mehr freigegeben, das kann allerdings schnell zu einem out-of-memory Problem werden. Bei Werten über 100 holt sich der Kernel den Speicher schneller wieder.