2013-03-11 6 views
42

Ich habe eine Amazon RDS-Instanz. Der freie Speicher ist seit der Installation über 1-2 Wochen gesunken, angefangen von 15 GB Speicher bis hin zu etwa 250 MB. Da es in den letzten Tagen so tief gefallen ist, hat es angefangen, einem Sägezahnmuster zu ähneln, bei dem der freie Speicher auf diesen Bereich (250 - 350 MB) fällt und dann wieder in einem Sägezahnmuster auf 500 - 600 MB ansteigt.Amazon RDS hat keinen freien Speicher mehr. Sollte ich besorgt sein?

Es gab keinen nennenswerten Rückgang der Anwendungsqualität. Allerdings mache ich mir Sorgen, dass der DB der Speicher ausgehen und abstürzen wird.

Besteht die Gefahr, dass die RDS-Instanz nicht mehr genügend Arbeitsspeicher hat? Gibt es eine Einstellung oder einen Parameter, den ich untersuchen sollte, um festzustellen, ob die Instanz korrekt eingerichtet ist? Was verursacht dieses Sägezahnmuster?

Freeable Memory Declining

Antwort

36

Freeable Speicherfeld wird von MySQL für die Pufferung und Caching für `s eigenen Prozesse verwendet. Es ist normal, dass die Menge an Freeable Memory im Laufe der Zeit abnimmt. Ich würde mir keine Sorgen machen, dass es alte Infos rausschmeißt, da es mehr Platz benötigt.

+0

Können Sie bitte auf eine MySQL-Dokumentation verweisen, die das erwähnt? –

+0

https://dev.mysql.com/doc/refman/5.7/en/buffering-caching.html - Aber es ist nicht streng MySQL. Das Betriebssystem selbst (RDS oder nicht) wird normalerweise auch E/A zwischenspeichern.In Verbindung mit MySQL-Pufferung/Caching und dem Betriebssystem-Caching (Disketten-I/O) wird ein typisches Betriebssystem fast immer den verfügbaren RAM füllen (und Einträge nach Bedarf leeren). Dies ist wünschenswert - nicht schlecht. Linux wird normalerweise viele/alle verfügbaren RAM ohne einen SQL-Prozess sowieso verbrauchen. Wie gesagt, es sei denn, es ist sehr günstig, wenn es frei wird (und dort bleibt/Swaps). – bshea

31

Kurze Antwort - Sie sollten sich keine Sorgen um FreeableMemory machen, es sei denn, es wurde wirklich niedrig (ca. 100-200 MB) oder es kommt zu signifikantem Swapping (siehe RDS SwapUsage-Metrik).

FreeableMemory ist keine MySQL-Metrik, sondern Betriebssystemmetrik. Es ist schwierig, eine genaue Definition zu geben, aber Sie können es als Speicher behandeln, den das Betriebssystem jedem zuweisen kann, der es anfordert (in Ihrem Fall ist es wahrscheinlich MySQL). MySQL hat eine Reihe von Einstellungen, die die Gesamtspeicherauslastung auf eine bestimmte Obergrenze beschränken (Sie können etwas wie this verwenden, um es tatsächlich zu berechnen). Es ist unwahrscheinlich, dass Ihre Instanz diese Grenze jemals erreichen wird, da Sie im Allgemeinen nie die maximale Anzahl von Verbindungen erreichen, aber dies ist immer noch möglich.

Jetzt zurück zu "Rückgang" in FreeableMemory Metrik. Für den MySQL-Speicher wird der meiste Speicher vom InnoDB-Pufferpool belegt (Details siehe here). RDS-Instanzen in der Config-Konfiguration haben standardmäßig eine Größe für diesen Puffer, die auf 75% des physischen Speichers des Hosts eingestellt ist - in Ihrem Fall also etwa 12 GB. Dieser Puffer wird zum Zwischenspeichern aller DB-Daten verwendet, die sowohl beim Lesen als auch beim Schreiben verwendet werden. In Ihrem Fall, da dieser Puffer wirklich groß ist - füllt er sich langsam mit Daten, die zwischengespeichert werden (es ist wahrscheinlich, dass dieser Puffer tatsächlich groß genug ist, um alle DB zwischenzuspeichern). Wenn Sie Ihre Instanz zum ersten Mal starten, ist dieser Puffer leer und sobald Sie anfangen, Daten in DB zu lesen/schreiben, werden all diese Daten in den Cache gebracht. Sie bleiben hier bis zu der Zeit, als dieser Cache voll wurde und eine neue Anfrage kam. Zu diesem Zeitpunkt werden die zuletzt verwendeten Daten durch neue Daten ersetzt. Die anfängliche Abnahme von FreeableMemory nach dem Neustart der DB-Instanz erklärt diese Tatsache. Es ist keine schlechte Sache, denn Sie möchten, dass so viele Daten wie möglich von Ihnen gespeichert werden, damit Sie schneller arbeiten können. Das einzige, was scheußlich werden kann, ist, wenn ein Teil oder der gesamte Puffer aus dem physikalischen Speicher in den Austausch verschoben wird. An diesem Punkt wirst du einen enormen Leistungsabfall haben.

Als eine vorbeugende Pflege könnte es eine gute Idee sein, MySQL max Speicher für verschiedene Dinge zu tunen, wenn Sie FreeableMemory Metrik ist ständig auf einem Niveau von 100-200 Mb, nur um die Möglichkeit des Swapping zu reduzieren.

0

Ich hatte das gleiche Problem, der freie Speicher in meiner Instanz ging unter 40 MB, Neustart der Instanz hat den Speicher zurückgesetzt.

Verwandte Themen