Frage Linux gibt keinen großen Festplatten-Cache frei, wenn der Speicherbedarf steigt


Ubuntu auf einem 2.6.31-302 x86-64 Kernel ausführen. Das allgemeine Problem ist, dass ich Speicher in der "Cache" -Kategorie habe, der weiter steigt und nicht freigegeben oder verwendet wird, selbst wenn unsere Anwendung es benötigt.

Also, hier ist, was ich aus dem "freien" Befehl bekomme. Nichts davon sieht auf den ersten Blick ungewöhnlich aus.

# free
             total       used       free     shared    buffers     cached
Mem:       7358492    5750320    1608172          0       7848    1443820
-/+ buffers/cache:    4298652    3059840
Swap:            0          0          0

Das erste, was jemand sagen wird, ist: "Keine Sorge, Linux verwaltet diesen Speicher automatisch." Ja, ich weiß, wie der Speichermanager arbeiten soll. Das Problem ist, dass es nicht das Richtige tut. Die "gepufferten" 1,4 GB scheinen hier reserviert und unbrauchbar zu sein.

Mein Linux-Wissen sagt mir, dass 3 GB "frei" sind; aber das Verhalten des Systems sagt etwas anderes. Wenn der 1,6 GB realer freier Speicher während der Spitzenlast aufgebraucht ist, sobald mehr Speicher angefordert wird (und der "freie" Wert in der ersten Spalte sich 0 nähert), wird der OOM-Killer aufgerufen, Prozesse werden beendet und es treten Probleme auf obwohl das 'free' in der - / + buffers / cache Zeile hat immer noch ca. 1,4 GB 'free'.

Ich habe die oom_adj-Werte auf Schlüsselprozesse abgestimmt, damit das System nicht in die Knie geht, aber selbst dann werden wichtige Prozesse beendet und wir wollen diesen Punkt nie erreichen. Vor allem, wenn theoretisch 1,4GB immer noch "frei" ist, wenn es nur den Plattencache räumen würde.

Hat jemand eine Idee, was hier vor sich geht? Das Internet ist überflutet von den dummen Fragen nach dem "freien" Linux-Befehl und "warum habe ich keine freie Erinnerung" und ich kann deswegen nichts finden.

Das erste, was mir in den Sinn kommt, ist, dass der Swap ausgeschaltet ist. Wir haben einen Systemadministrator, der unnachgiebig ist; Ich bin offen für Erklärungen, wenn sie gesichert sind. Könnte das zu Problemen führen?

Hier ist frei nach dem Laufen echo 3 > /proc/sys/vm/drop_caches :

# free
             total       used       free     shared    buffers     cached
Mem:       7358492    5731688    1626804          0        524    1406000
-/+ buffers/cache:    4325164    3033328
Swap:            0          0          0

Wie Sie sehen können, ist tatsächlich eine winzige Menge an Cache frei, aber etwa 1,4 GB scheint "stecken zu bleiben". Das andere Problem ist, dass dieser Wert im Laufe der Zeit zu steigen scheint. Auf einem anderen Server stecken 2,0 GB fest.

Ich würde diese Erinnerung wirklich gerne haben ... jede Hilfe wäre sehr geschätzt.

Hier ist cat /proc/meminfo wenn es irgendwas wert ist:

# cat /proc/meminfo 
MemTotal:        7358492 kB
MemFree:         1472180 kB
Buffers:            5328 kB
Cached:          1435456 kB
SwapCached:            0 kB
Active:          5524644 kB
Inactive:          41380 kB
Active(anon):    5492108 kB
Inactive(anon):        0 kB
Active(file):      32536 kB
Inactive(file):    41380 kB
Unevictable:           0 kB
Mlocked:               0 kB
SwapTotal:             0 kB
SwapFree:              0 kB
Dirty:               320 kB
Writeback:             0 kB
AnonPages:       4125252 kB
Mapped:            42536 kB
Slab:              29432 kB
SReclaimable:      13872 kB
SUnreclaim:        15560 kB
PageTables:            0 kB
NFS_Unstable:          0 kB
Bounce:                0 kB
WritebackTmp:          0 kB
CommitLimit:     3679244 kB
Committed_AS:    7223012 kB
VmallocTotal:   34359738367 kB
VmallocUsed:        7696 kB
VmallocChunk:   34359729675 kB
DirectMap4k:     7340032 kB
DirectMap2M:           0 kB

22
2017-07-08 14:15


Ursprung


Ich habe keine Erklärung für deinen Cache (obwohl ich vermute, dass mmap'd-Dateien wahrscheinlich dazukommen), aber zum Wohle der Menschheit, nimm eine Schaufel und etwas Ätzkalk und beseitige das "Du brauchst keinen Swap wenn du viel RAM hast! " Booster. Sie sind immun gegen rationale Diskussionen, und sie sind gefährlich falsch. Die Tatsache, dass der OOM-Killer dich verfolgt, ist nur ein Symptom dafür. - womble♦
Genau meine Gedanken. Danke für den Hinweis. Kennen Sie weitere gute Artikel oder Argumente, warum Swap notwendig ist? - trisweb
Denn wenn du keinen Tausch hast, passieren solche Dinge. Aber versuchen Sie nicht, mit Ihrem Tausch-Leugner zu streiten; Brich entweder den Branntkalk aus oder sag "wenn du hier nicht tauschen willst, Sie repariere dieses Durcheinander, auf das du bestanden hast. "Sie werden entweder ihre Meinung selbst ändern oder sie werden sterben. Das Problem ist in jeder Hinsicht gelöst. - womble♦
Ausgezeichnet, danke für die Tipps. Sie hatten übrigens Recht mit mmap-Dateien - eine kurze Liste zeigte Gigs von Log-Dateien, die den Speicher aufnahmen. Das Ausräumen löste das Problem. - trisweb
Das Problem besteht darin, dass es ohne Swap zu einer Überlastung der Ergebnisse kommt, wenn der OOM-Killer ausgeführt wird und die Ergebnisse nicht zu einem System führen, das keine Prozesse starten kann. Sie müssen austauschen, um RAM effektiv zu nutzen. - David Schwartz


Antworten:


Ich habe die Antwort auf meine eigene Frage entdeckt - dank der Hilfe von Womble (reiche eine Antwort ein, wenn du magst).

lsof -s zeigt die verwendeten Dateizugriffsnummern an und stellt fest, dass mehrere Gigabyte MMAP-Protokolldateien den Cache belegen.

Die Implementierung eines Logrotats sollte das Problem vollständig lösen und es mir ermöglichen, mehr Speicher zu nutzen.

Ich werde auch Swap wieder aktivieren, so dass wir in Zukunft keine Probleme mit dem OOM Killer haben werden. Vielen Dank.


8
2017-07-12 14:32



mmap-Seiten sind verwerfbar, so dass der Cache nicht gepinnt werden sollte. Benutzt du einen Ramfs? - psusi
Hallo, Entschuldigung, einen alten Thread auszugraben, aber ich habe derzeit das gleiche Problem und lsof -s zeigt keine ungewöhnliche Verwendung. Allerdings verwende ich einen Ramfs wie Sie sagten [und der Kernel 2.6.10, die nicht über die Funktion drop_caches verfügen]. Was denkst du ist der wahrscheinliche Verdächtige? - Ram
Danke für den Tipp! Ich füge hinzu lsof -s | sort -rnk 7 | less Jetzt zu meiner Toolbox. Eine Anmerkung für andere Leser: Das mögen große Einträge wie /proc/net/rpc/nfs4.nametoid/channel, aber sie entpuppten sich in meinem Fall nicht als Täter. - Nickolay
Stellen Sie sicher, dass Ihre großen Dateien oder Programme mlock nicht verwenden. im /proc/meminfo Schauen Sie auf "Unbestreitbare" Seiten. - Michael Martinez


Anscheinend, postgres ' shared_buffers kann in erscheinen cached, obwohl nicht wirklich leicht verwerfbar ... Siehe OOM trotz verfügbarem Speicher (Cache)


1
2018-06-15 15:08



Offensichtlich die richtige Antwort. Siehe auch hier. - kubanczyk