Wir haben ständig Probleme mit dem Austausch unserer ElastiCache Redis-Instanz. Amazon scheint über eine grobe interne Überwachung zu verfügen, bei der Auslagerungsspitzen festgestellt werden und die ElastiCache-Instanz einfach neu gestartet wird (wodurch alle zwischengespeicherten Elemente verloren gehen). Hier ist das Diagramm von BytesUsedForCache (blaue Linie) und SwapUsage (orange Linie) auf unserer ElastiCache-Instanz für die letzten 14 Tage:
Sie können sehen, dass das Muster der zunehmenden Auslagerungsnutzung einen Neustart unserer ElastiCache-Instanz auslöst, wobei alle zwischengespeicherten Elemente verloren gehen (BytesUsedForCache fällt auf 0).
Die Registerkarte "Cache-Ereignisse" in unserem ElastiCache-Dashboard enthält entsprechende Einträge:
Quell-ID | Typ | Datum | Veranstaltung
Cache-Instanz-ID | Cache-Cluster | Dienstag, 22. September, 07:34:47 GMT-400 2015 | Cache-Knoten 0001 neu gestartet
Cache-Instanz-ID | Cache-Cluster | Di 22.09. 07:34:42 GMT-400 2015 | Fehler beim Neustarten der Cache-Engine auf Knoten 0001
Cache-Instanz-ID | Cache-Cluster | So 20.09. 11:13:05 GMT-400 2015 | Cache-Knoten 0001 neu gestartet
Cache-Instanz-ID | Cache-Cluster | Do 17.09. 22:59:50 GMT-400 2015 | Cache-Knoten 0001 neu gestartet
Cache-Instanz-ID | Cache-Cluster | Wed Sep 16 10:36:52 GMT-400 2015 | Cache-Knoten 0001 neu gestartet
Cache-Instanz-ID | Cache-Cluster | Di 15.09. 05.02.35 GMT-400 2015 | Cache-Knoten 0001 neu gestartet
(frühere Einträge ausschneiden)
SwapUsage - Im normalen Gebrauch sollten weder Memcached noch Redis Swaps durchführen
Unsere relevanten (nicht standardmäßigen) Einstellungen:
- Instanztyp:
cache.r3.2xlarge
maxmemory-policy
: allkeys-lru (wir hatten vorher die voreingestellte volatile-lru ohne großen Unterschied verwendet)maxmemory-samples
: 10reserved-memory
: 2500000000- Wenn ich den INFO-Befehl auf der Instanz überprüfe, sehe ich
mem_fragmentation_ratio
zwischen 1.00 und 1.05
Wir haben den AWS-Support kontaktiert und nicht viele nützliche Ratschläge erhalten: Sie haben vorgeschlagen, den reservierten Speicher noch weiter zu erhöhen (der Standardwert ist 0 und wir haben 2,5 GB reserviert). Für diese Cache-Instanz sind keine Replikationen oder Snapshots eingerichtet, daher sollten meines Erachtens keine BGSAVEs auftreten, die eine zusätzliche Speichernutzung verursachen.
Die maxmemory
Obergrenze einer cache.r3.2xlarge-Datei beträgt 62495129600 Byte, und obwohl wir unsere Obergrenze (minus unserer reserved-memory
) schnell erreicht haben, erscheint es mir merkwürdig, dass das Host-Betriebssystem unter Druck geraten würde, hier so viel Swap zu verwenden, und zwar so schnell, es sei denn Amazon hat aus irgendeinem Grund die Einstellungen für den Austausch von Betriebssystemen erhöht. Irgendwelche Ideen, warum wir ElastiCache / Redis so häufig austauschen, oder eine mögliche Problemumgehung?