У нас постоянно возникают проблемы с обменом экземпляров ElastiCache Redis. Похоже, что в Amazon есть какой-то грубый внутренний мониторинг, который замечает всплески использования свопов и просто перезапускает экземпляр ElastiCache (тем самым теряя все наши кэшированные элементы). Вот диаграмма BytesUsedForCache (синяя линия) и SwapUsage (оранжевая линия) в нашем экземпляре ElastiCache за последние 14 дней:
Вы можете видеть шаблон растущего использования свопа, который, по-видимому, вызывает перезагрузку нашего экземпляра ElastiCache, при котором мы теряем все наши кэшированные элементы (BytesUsedForCache падает до 0).
На вкладке «События кэша» нашей панели инструментов ElastiCache есть соответствующие записи:
ID источника | Тип | Дата | Событие
идентификатор экземпляра кэша | кеш-кластер | Вт сен 22 07:34:47 GMT-400 2015 | Узел кэша 0001 перезапущен
идентификатор экземпляра кэша | кеш-кластер | Вт сен 22 07:34:42 GMT-400 2015 | Ошибка перезапуска механизма кэширования на узле 0001
идентификатор экземпляра кэша | кеш-кластер | Вс 20 сентября 11:13:05 GMT-400 2015 | Узел кэша 0001 перезапущен
идентификатор экземпляра кэша | кеш-кластер | Чт 17 сентября 22:59:50 GMT-400 2015 | Узел кэша 0001 перезапущен
идентификатор экземпляра кэша | кеш-кластер | Ср 16 сентября 10:36:52 GMT-400 2015 | Узел кэша 0001 перезапущен
идентификатор экземпляра кэша | кеш-кластер | Вт 15 сен 05:02:35 GMT-400 2015 | Узел кэша 0001 перезапущен
(отрежьте предыдущие записи)
SwapUsage - при обычном использовании ни Memcached, ни Redis не должны выполнять свопы
Наши соответствующие (не по умолчанию) настройки:
- Тип экземпляра:
cache.r3.2xlarge
maxmemory-policy
: allkeys-lru (ранее мы использовали volatile-lru по умолчанию без особой разницы)maxmemory-samples
: 10reserved-memory
: 2500000000- Проверяя команду INFO на экземпляре, я вижу
mem_fragmentation_ratio
между 1.00 и 1.05
Мы связались со службой поддержки AWS и не получили много полезных советов: они предложили увеличить зарезервированную память еще выше (по умолчанию 0, и у нас зарезервировано 2,5 ГБ). У нас нет репликации или моментальных снимков, настроенных для этого экземпляра кэша, поэтому я считаю, что BGSAVE не должны возникать и вызывать дополнительное использование памяти.
maxmemory
Крышка из cache.r3.2xlarge является 62495129600 байт, и хотя мы попали наш колпачок (минус наш reserved-memory
) быстро, это мне кажется странным , что операционная система хоста будет чувствовать давление , чтобы использовать так много подкачки здесь, и так быстро, если Amazon по какой-то причине проверил настройки подкачки ОС. Любые идеи, почему мы будем вызывать так много использования свопа на ElastiCache / Redis, или обходной путь, который мы могли бы попробовать?
источник
SCAN
работа в ответе еще провоцирует зачистку. AWS теперь предлагает функции Redis Cluster, которые, я уверен, помогли бы при интенсивном использовании.Я знаю, что это может быть старым, но я столкнулся с этим в документации AWS.
https://aws.amazon.com/elasticache/pricing/ Они утверждают, что r3.2xlarge имеет 58,2 ГБ памяти.
https://docs.aws.amazon.com/AmazonElastiCache/latest/red-ug/ParameterGroups.Redis.html Они утверждают, что maxmemory системы составляет 62 ГБ (это когда политика maxmemory запустится) и что ее нельзя изменить , Кажется, что независимо от того, что с Redis в AWS мы поменяемся ..
источник
62495129600
байты, а это точно 58,2 ГиБ. Страница с ценами, на которую вы ссылаетесь, имеет объем памяти в ГБ, а не ГБ.maxmemory
Параметр, по- видимому , не модифицируемый , потому что есть лучшие ручки , предоставляемые Redis, такие какreserved-memory
(хотя это один не помогла мне ...), которые являются изменяемыми и AWS не хочет , чтобы вы неправильно настроенную узел, например , говоря Redis в использовать больше памяти, чем на самом деле имеет Elasticache VM.