2009-03-01 7 views
27

Ich möchte den Linux-Kernel zwingen, den Anwendungen mehr Speicher zuzuweisen, nachdem der Cache zu viel Speicher belegt hat (wie man an der Ausgabe von 'free' sehen kann).So bereinigen Sie die vom Linux-Kernel verwendeten Caches

Ich habe

laufen
sudo sync; sudo sysctl -w vm.drop_caches=3; free 

(auf beiden Scheiben dentry/inode-Cache und Cache-Seite frei), und ich sehe, dass nur etwa die Hälfte des verwendeten Cache befreit wurde - der Rest bleibt. Wie kann ich feststellen, was den Rest des Caches belegt und ihn zur Freigabe zwingt?

+0

Der verbleibende Cache ist nur ein Cache, der sofort gelöscht wird, wenn neuer Speicher benötigt wird. Es ist nicht vorteilhaft, das Entfernen dieser Cache-Bereiche zu erzwingen. Anwendungen werden immer erste Bürger für das Gedächtnis sein und müssen nicht mit Cache dafür kämpfen. – ypnos

+1

Ich habe ein Problem mit meinem Server, und ich glaube, dass etwas den Cache bis zu dem Punkt missbraucht, an dem Anwendungen auf ausgelagerte Seiten verwiesen werden und sich wegen mangelndem Arbeitsspeicher abstoßen. Es könnte ein Kernel-Problem sein, das es möglicherweise nicht ist. Das Löschen des Caches ist möglicherweise eine gute Möglichkeit zum Testen. – Guss

+0

Ihre 'sysctrl' muss 'sysctl' sein – raittes

Antwort

17

Sie sollten vfs_cache_pressure erhöhen und swappiness auf 0 setzen. Dadurch wird der Kernel den Cache schneller zurückgewinnen, während Prozesse gleich oder besser sind, wenn wh entschieden wird at wird ausgelagert. Sie nur möchten dies tun, wenn Prozesse, die Sie interessieren, sehr wenig Datenträger I/O tun. Wenn ein Netzwerk-I/O-gebundener Prozess sich einlagern muss, um Anforderungen zu bedienen, ist das ein Problem, und die wirkliche Lösung besteht darin, ihn auf einen weniger wettbewerbsfähigen Server zu stellen.

Mit der Standard-Swappiness-Einstellung favorisiert der Kernel fast immer FS-bezogenen Cache im realen Speicher. Wenn Sie also den Cachedruck erhöhen, sollten Sie auch die Swappiness anpassen.

+0

Danke für die Antwort. Obwohl es nicht das ist, was ich mir erhofft habe, akzeptiere ich es, da es Informationen enthält, die ich nicht kannte und gibt einige Richtlinien, um ein Ziel zu erreichen. Ich würde gerne noch besser wissen, wie man herausfinden kann, wofür der Cache verwendet wird, besonders wenn er nicht durch drop_caches bereinigt wird. – Guss

16

Der Inhalt von /proc/meminfo sagen Sie, was der Kernel RAM für verwendet.

Sie können /proc/sys/vm/vfs_cache_pressure verwenden, um den Kernel zu zwingen, Speicher, der für Dateisystem-bezogene Caches verwendet wird, mehr träge oder eifrig zurückzufordern.

Beachten Sie, dass Ihre Anwendung möglicherweise nur dann von der Optimierung dieses Parameters profitiert, wenn sie wenig oder keine Festplatten-E/A-Vorgänge ausführt.

+1

Meine App tut sehr wenig IO - die meisten Daten stammen von einer entfernten DB. Ich bin ein wenig verschwommen auf dem/proc/meminfo: Ich sehe über Cache: 1,9GB, SwapCached: 8MB. IIRC, das bedeutet, dass Cached besteht aus 8 MB Swap-Caching, 1,892 GB andere Sachen (Disk-Cache, und was noch?). Wo werden Memory-Mapped-Dateien gezählt? – Guss

+0

Memory-Mapped-Dateien (wenn die App überhaupt in Ordnung ist) sollten ihre eigenen Advisories und Druck haben, vorzugsweise durch die Anwendung, die posix_madvise() aufruft. Vielleicht möchten Sie auch Ihre Einstellung 'Swappiness' nachlesen. –

+0

In der Tat eine gute Antwort, nur keine Antwort auf meine Frage :-). Verstehe ich richtig, dass Speicherabbilddateien mit dem RES-Speicherbedarf der Anwendung verglichen werden? – Guss

15

Sie John Nilsson's answer to my Question nützlich zum Spülen des Cache, um, ob sich das für Ihr Problem mit Bezug zu testen finden könntest:

sync && echo 1 > /proc/sys/vm/drop_caches

Obwohl ich den einzigen wirklichen Unterschied bin zu raten ist 1 vs 3

+0

1 löscht nur den Festplatten-Cache - es war für Ihre Frage relevant. Ich möchte auch den Seitencache löschen, da ich denke, dass eine meiner Apps Speicher verliert und schlecht spielt. – Guss

+2

1 löscht den Seitencache, 2 löscht Dentries und Inodes, 3 löscht den Seitencache, dentries und inodes – Schildmeijer