Löschen des zwischengespeicherten Linux-RAM

Löschen des zwischengespeicherten Linux-RAM

Ich habe einen Webserver mit 8 GB RAM, auf dem eine ziemlich intensive PHP-Site (1 Site) läuft, die Dateimanipulation, Diagrammerstellung, E-Mail, Foren usw. bietet. Die Umgebung ist alles andere als statisch, was mich zu der Annahme veranlasst, dass das Zwischenspeichern von irgendetwas im RAM nur sehr wenig bringt, da fast jede Anfrage an den Server neue oder aktualisierte Seiten erstellt. Und ein Großteil des Zwischenspeicherns erfolgt clientseitig, sodass wir eine Menge 304-Anfragen haben, wenn es um Bilder, JavaScript und CSS geht.

Darüber hinaus habe ich Sprachdateien, die in Flatfiles auf dem Server geschrieben sind, wobei zwischengespeicherter RAM definitiv besser ist als das Lesen von der Festplatte. Aber es gibt nur eine Handvoll solcher Dateien.

In etwa zwei Wochen war mein freier RAM von 98 % auf 4 % gesunken. Dies geschah zu einer Zeit, in der wir auch mehrere große SVN-Updates auf den Server übertragen haben.

Meine Frage ist nun, ob mein Server besser optimiert ist, wenn ich meinen Cache regelmäßig mit dem folgenden Befehl lösche (ich kenne Linus Torvalds‘ Einstellung zum Cache):

sync; echo 3 > /proc/sys/vm/drop_caches

Oder wäre es besser, wenn ich die folgende Datei bearbeite:

/proc/sys/vm/swappiness  

Wenn ich den Standardwert 60 durch 30 ersetze, sollte es deutlich weniger Swapping geben und der veraltete Cache sollte deutlich häufiger wiederverwendet werden.

Es ist schon ein gutes Gefühl, den gesamten Cache mit dem ersten Befehl freigegeben zu sehen, aber ich würde lügen, wenn ich Ihnen sagen würde, dass dies gut für die Desktop-Umgebung ist. Aber was ist mit einem Webserver, wie ich ihn oben beschrieben habe? Was meinen Sie?

EDIT: Mir ist bewusst, dass das System Speicher nach Bedarf aus dem Cache-Speicher bezieht, aber danke für den Hinweis zur Verdeutlichung. Bilde ich mir das ein, wenn Apache langsamer wird, wenn der Großteil des Serverspeichers im Cache gespeichert ist? Ist das ein ganz anderes Problem?

Antwort1

Das Leeren des Caches beeinträchtigt die Leistung, anstatt sie zu verbessern. Wenn der RAM für etwas anderes benötigt würde, würde er von etwas anderem verwendet werden. Sie reduzieren also lediglich das Cache-Treffer-/Fehlschlag-Verhältnis für eine Weile, nachdem Sie das Leeren durchgeführt haben.

Wenn die Daten im Cache sehr veraltet sind (d. h. es handelt sich um Daten, die während eines ungewöhnlichen Vorgangs zwischengespeichert wurden), werden sie bei Bedarf durch „neuere“ Daten ersetzt, ohne dass Sie sie künstlich löschen müssen.

Der einzige Grund für die sync; echo 3 > /proc/sys/vm/drop_cachesnormale Ausführung besteht darin, dass Sie einige E/A-Leistungstests durchführen möchten und von einem bekannten Startzustand ausgehen möchten (Ausführen des Cache-Drops zwischen den Läufen, um Ergebnisunterschiede zu verringern, die dadurch entstehen, dass der Cache bei jedem Lauf anders vorbereitet wird).

Der Kernel lagert manchmal ein paar Seiten aus, obwohl genügend RAM vorhanden ist, das er aus Cache/Puffern zurückfordern könnte. Wenn Sie die Einstellung für die Auslagerung anpassen, kann dies verhindert werden, wenn Sie feststellen, dass dies ein Problem für Ihren Server darstellt. Sie sehen möglicherweise einen kleinen Vorteil daraus, aber wahrscheinlich eine vorübergehende Leistungseinbuße.fallendurch künstliches Löschen von Cache und Puffer.

verwandte Informationen