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ć?
źródło
SCAN
praca w odpowiedzi wciąż prowokuje porządki. AWS oferuje teraz funkcje klastra Redis, które założę się, że pomogłyby w przypadku intensywnego użytkowania.Wiem, że to może być stare, ale natknąłem się na to w dokumentacji aws.
https://aws.amazon.com/elasticache/pricing/ Twierdzą, że r3.2xlarge ma 58,2 GB pamięci.
https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/ParameterGroups.Redis.html Stwierdzają, że maksymalna pamięć systemowa wynosi 62 GB (wtedy zaczyna się polityka maxmemory) i nie można jej zmienić . Wydaje się, że bez względu na to, co z Redis w AWS wymienimy.
źródło
62495129600
bajty, czyli dokładnie 58,2 GiB. Strona z cenami, którą podłączyłeś, ma pamięć w jednostkach GiB, a nie GB.maxmemory
Parametr nie jest przypuszczalnie modyfikowalny ponieważ istnieją lepsze gałki przewidziane przez Redis, takie jakreserved-memory
(mimo, że nie udało mi pomóc ...), które można modyfikować, a AWS nie chce Błędna konfiguracja węzła przez np mówienie Redis do używają więcej pamięci niż faktycznie ma maszyna wirtualna Elasticache.