Mamy ciągłe problemy z wymianą instancji ElastiCache Redis. Wydaje się, że Amazon ma pewne surowe wewnętrzne monitorowanie, które zauważa skoki użycia wymiany i po prostu restartuje instancję ElastiCache (tracąc w ten sposób wszystkie nasze buforowane elementy). Oto wykres BytesUsedForCache (niebieska linia) i SwapUsage (pomarańczowa linia) w naszym wystąpieniu ElastiCache z ostatnich 14 dni:
Widać wzorzec rosnącego użycia wymiany, który zdaje się wyzwalać ponowne uruchomienie instancji ElastiCache, w której tracimy wszystkie nasze buforowane elementy (BytesUsedForCache spada do 0).
Karta „Zdarzenia pamięci podręcznej” naszego pulpitu nawigacyjnego ElastiCache zawiera odpowiednie wpisy:
ID źródła | Wpisz | Data | Zdarzenie
cache-instance-id | klaster pamięci podręcznej | Wt 22 września 07:34:47 GMT-400 2015 | Węzeł pamięci podręcznej 0001 został zrestartowany
cache-instance-id | klaster pamięci podręcznej | Wt 22 września 07:34:42 GMT-400 2015 | Błąd podczas ponownego uruchamiania silnika pamięci podręcznej w węźle 0001
cache-instance-id | klaster pamięci podręcznej | Niedz. 20 wrz 11:13:05 GMT-400 2015 | Węzeł pamięci podręcznej 0001 został zrestartowany
cache-instance-id | klaster pamięci podręcznej | Cz 17 Wrz 22:59:50 GMT-400 2015 | Węzeł pamięci podręcznej 0001 został zrestartowany
cache-instance-id | klaster pamięci podręcznej | Śr. 16 wrz 10:36:52 GMT-400 2015 | Węzeł pamięci podręcznej 0001 został zrestartowany
cache-instance-id | klaster pamięci podręcznej | Wt 15 września 05:02:35 GMT-400 2015 | Węzeł pamięci podręcznej 0001 został zrestartowany
(wycinaj wcześniejsze wpisy)
SwapUsage - w normalnym użyciu ani Memcached, ani Redis nie powinny wykonywać swapów
Nasze odpowiednie (inne niż domyślne) ustawienia:
- Rodzaj wystąpienia:
cache.r3.2xlarge
maxmemory-policy
: allkeys-lru (wcześniej używaliśmy domyślnego volatile-lru bez większych różnic)maxmemory-samples
: 10reserved-memory
: 2500000000- Sprawdzam polecenie INFO w instancji, widzę
mem_fragmentation_ratio
między 1,00 a 1,05
Skontaktowaliśmy się z obsługą AWS i nie otrzymaliśmy wiele przydatnych porad: zasugerowali zwiększenie pamięci zarezerwowanej jeszcze wyżej (domyślnie jest 0, a mamy 2,5 GB zarezerwowanej). Nie mamy skonfigurowanych replikacji ani migawek dla tej instancji pamięci podręcznej, więc uważam, że nie powinny wystąpić żadne BGSAVE, powodujące dodatkowe użycie pamięci.
maxmemory
Cap o cache.r3.2xlarge jest 62495129600 bajtów, i mimo, że nasz hit cap (minus nasz reserved-memory
) szybko, wydaje mi się dziwne, że system operacyjny hosta czułby się zmuszony użyć tyle zamianę tutaj, i tak szybko, chyba Amazon z jakiegoś powodu poprawił ustawienia zamiany systemu operacyjnego. Jakieś pomysły, dlaczego powodujemy tak duże użycie wymiany w ElastiCache / Redis, lub obejście, które możemy wypróbować?