it-swarm.com.de

Warum verwendet mein System so viel Cache?

Zuvor hatte ich auf meinem Desktop-Computer mit Ubuntu 14.04 4 GB RAM, was ich für ausreichend hielt. Nach einer Weile scheint mein Computer jedoch langsam zu werden. Ich habe eine App zur Überwachung von Systemressourcen in meinem Gnome-Bedienfeld, von der ich annehme, dass sie das verfügbare RAM (?) Darstellt. Es zeigt einen dunkelgrünen Bereich als "Speicher" und einen hellgrünen Bereich als "Cache". Der "Cache" wuchs langsam, bis er das gesamte Diagramm füllte, und dann wurde das Laden der Programme langsam, oder es dauerte eine Weile, bis die Programme gewechselt wurden.

Ich könnte das Problem mit diesem Befehl etwas lindern, aber irgendwann füllt sich der Computercache wieder, sodass es sich nur um einen Bandaid handelt:

Sudo sh -c "sync; echo 3 > /proc/sys/vm/drop_caches"

Also dachte ich, ich würde mehr RAM bekommen, also habe ich einen 2 GB-Stick durch einen 8 GB-Stick ersetzt und jetzt habe ich 10 GB RAM.

Und mein "Cache" noch wird langsam voll und mein Computer verlangsamt sich infolgedessen. Manchmal startet der Computer auch mit maximalem "Cache", wenn ich mich zum ersten Mal starte und anmelde. Nicht immer, aber ich weiß nicht, ob es ein Muster gibt, das bestimmt, warum es passiert.

Warum verbraucht Ubuntu so viel Cache? Reichen 10 GB für Ubuntu nicht aus?

So sieht mein Systemmonitor in meinem Gnome-Panel aus. Das mittlere Quadrat zeigt die Verwendung von RAM. Der hellgrüne Bereich ist der "Cache":

Cache near max

Dies ist meine Speicher- und Auslagerungshistorie, die anscheinend keine Informationen über "Cache" enthält. Mir ist klar, dass mir der Unterschied zwischen "Cache" und "Swap" noch nicht ganz klar ist:

memory and swap

4
Questioner

Sie müssen wahrscheinlich Ihre Swappiness reduzieren.

Der Kernel ist der Ansicht, dass es besser ist, den freien RAM als Cache zu verwenden, als Cache-Seiten zu entfernen und den RAM als wirklich frei zu kennzeichnen. Das Vergrößern des Caches ist im Allgemeinen eine gute Sache.

Nun stellt sich die Frage, was zu tun ist, wenn der gesamte Speicher dem Cache zugewiesen ist und Ihre Anwendung mehr Speicher benötigt. Oft ist es das Richtige, eine Seite aus dem Cache zu entfernen und an Ihre App zu übergeben. Gelegentlich ist es jedoch von Vorteil, eine selten verwendete Seite auszutauschen, diese an Ihre App weiterzugeben und den Cache intakt zu halten.

Dieser Vorgang wird lose von /proc/sys/vm/swappiness gesteuert. Für weitere Informationen lesen Sie bitte die hervorragenden Antworten auf Warum empfehlen die meisten Leute, den Austausch auf 10-20 zu reduzieren? und Wie konfiguriere ich den Austausch? .

8
sмurf

Ihr System verwendet so viel Cache, weil es für die Aufnahme zur Verfügung steht und dabei helfen kann, schneller zu werden.

Im Allgemeinen wird in Caching eine Kopie von etwas abgelegt, das nur langsam abgerufen werden kann oder das nur langsam berechnet werden kann, wenn es schneller abgerufen werden kann. Ein Programm speichert möglicherweise das Ergebnis einer Berechnung im Speicher, ein Web-Proxy speichert möglicherweise eine Kopie einer Ressource aus dem Web auf einem Computer in Ihrem LAN, und in diesem Fall speichert ein System möglicherweise Daten von den Festplatten in RAM (und einige andere Daten).

Und weil es das System schneller macht, ist es logisch, jedes Kilobyte zu verwenden, das nicht von etwas anderem verwendet wird. Die Optionen für einen Teil des Speichers, den nichts anderes verwendet, lauten schließlich:

                      |Use For Cache | Don't Use For Cache
——————————————————————+——————————————+————————————————————
Data needed again     |Faster system | No difference
Data not needed again |No difference | No difference

Aus diesem Grund sollten Sie immer jeden Speicher verwenden, der nichts für den Cache bewirkt.

Ein System, auf dem 10% des RAM für verschiedene Zwecke und 90% für den Cache verwendet werden, sollte nicht als "Maximierung" betrachtet werden. Man sollte sich vorstellen, dass es zu 10% genutzt wird, wobei weitere 90% kostenlos sind und daher für den Cache verwendet werden, während nichts dafür benötigt wird.

Wenn wir jedoch das Auslagern in Betracht ziehen, ist dies fast das Gegenteil des Zwischenspeicherns von Daten von der Festplatte im RAM: Wenn beim Zwischenspeichern RAM zum Beschleunigen von E/A (und möglicherweise anderen Dingen) verwendet wird, wird beim Paging Speicherplatz zum Erweitern verwendet RAM.

Wenn also das gesamte RAM des Systems verwendet wird und mehr benötigt wird, stehen zwei Optionen zur Verfügung:

  1. Werfen Sie einen Teil des Caches weg, da es sich letztendlich nur um eine Optimierung handelt.
  2. Einige RAM ausblättern, die für etwas anderes verwendet werden.

Es gibt keine allgemeingültige Antwort darauf, welche davon die beste ist. Die perfekte Antwort hängt von einer Reihe von Dingen ab, die nicht vorhergesagt werden können, und selbst die beste Antwort hängt von einer Reihe von Dingen ab, die von Ihrer Systemeinrichtung und der Art und Weise abhängen, wie Sie sie verwenden.

Beachten Sie, dass diese gegensätzlichen Aktionen gleichzeitig sinnvoll sind: Zum einen geht es darum, langsam abzurufende Informationen, die Sie wahrscheinlich benötigen, zu priorisieren, zum anderen geht es darum, Informationen, die Sie nicht in Kürze benötigen, zu priorisieren.

250MB sind nicht viel, daher würde ich mir keine großen Sorgen machen, aber für ein Desktop-System mit hohem Arbeitsspeicher für die interaktive Verwendung (anstatt für die Verwendung auf Servern) experimentiere ich könnte mit dem Reduzieren von Swapiness, um das zu ändern Spagat hier. Diese Antwort ist sehr gut, warum es wahrscheinlich keinen großen Unterschied macht, aber es ist eine vernünftige Sache, damit zu experimentieren, um zu sehen, ob es geht.

Sie haben ein viel größeres Problem, mit dem Sie sich zuerst befassen müssen, nämlich, dass ab und zu jemand Sudo sh -c "sync; echo 3 > /proc/sys/vm/drop_caches" auf Ihrem Computer ausführt, wodurch schnell zugreifbare Daten von ansonsten nicht verwendeten RAM gelöscht werden. und zwingt das System, neu zu berechnen oder abzurufen, was es nur aus dem Speicher holen kann. Dadurch wird das System langsamer und der RAM eine Geldverschwendung.

5
Jon Hanna

Und mein "Cache" wird immer noch langsam voll und mein Computer wird dadurch langsamer.

Sie müssen anderswo nach der Ursache für Ihre Verlangsamung suchen. Der als "Cache" bezeichnete Speicher ist der Speicher, den der Kernel frei wegwerfen kann, wenn etwas anderes RAM benötigt. Es sind Dinge wie Daten, die kürzlich von der Disc gelesen wurden.

This ist zwar ziemlich alt, aber dennoch eine vernünftige Beschreibung einiger beweglicher Teile im Speichersubsystem. Wie es sagt,

Linux hat diese Grundregel: Eine Seite mit freiem RAM ist verschwendeter RAM.

Egal wie viel RAM Sie haben, Ihr Cache wird größer, um ihn zu füllen. Dies ist kein Grund zur Sorge. Im Gegenteil, es ist eine sehr signifikante Leistungsoptimierung - RAM ist ungefähr 100-mal schneller als eine schnelle SSD, also immer wenn Sie nicht von der CD zu lesen ist ein großer Gewinn.

4
RAOF