Temos tido problemas contínuos com a troca de instância do ElastiCache Redis. A Amazon parece ter algum monitoramento interno bruto, que notifica a troca de picos de uso e simplesmente reinicia a instância do ElastiCache (perdendo assim todos os nossos itens em cache). Aqui está o gráfico de BytesUsedForCache (linha azul) e SwapUsage (linha laranja) em nossa instância do ElastiCache nos últimos 14 dias:
Você pode ver o padrão de crescente uso de swap que parece acionar reinicializações de nossa instância do ElastiCache, em que perdemos todos os nossos itens armazenados em cache (BytesUsedForCache cai para 0).
A guia 'Eventos de cache' do painel do ElastiCache possui entradas correspondentes:
ID da fonte | Tipo | Data Evento
ID da instância de cache | cluster de cache | Ter 22 de setembro 07:34:47 GMT-400 2015 | Nó de cache 0001 reiniciado
ID da instância de cache | cluster de cache | Ter 22 de setembro 07:34:42 GMT-400 2015 | Erro ao reiniciar o mecanismo de cache no nó 0001
ID da instância de cache | cluster de cache | Dom 20 de setembro 11:13:05 GMT-400 2015 | Nó de cache 0001 reiniciado
ID da instância de cache | cluster de cache | Qui 17 de setembro 22:59:50 GMT-400 2015 | Nó de cache 0001 reiniciado
ID da instância de cache | cluster de cache | Qua 16 de setembro 10:36:52 GMT-400 2015 | Nó de cache 0001 reiniciado
ID da instância de cache | cluster de cache | Ter 15 de setembro 05:02:35 GMT-400 2015 | Nó de cache 0001 reiniciado
(cortar entradas anteriores)
SwapUsage - no uso normal, nem o Memcached nem o Redis devem executar swaps
Nossas configurações relevantes (não padrão):
- Tipo de instância:
cache.r3.2xlarge
maxmemory-policy
: allkeys-lru (estávamos usando o volátil-lru padrão anteriormente sem muita diferença)maxmemory-samples
: 10reserved-memory
: 2500000000- Verificando o comando INFO na instância, vejo
mem_fragmentation_ratio
entre 1,00 e 1,05
Entramos em contato com o suporte da AWS e não recebemos muitos conselhos úteis: sugeriram aumentar ainda mais a memória reservada (o padrão é 0 e temos 2,5 GB reservados). Como não temos replicação ou instantâneos configurados para esta instância de cache, acredito que nenhum BGSAVE deve estar ocorrendo e causando uso adicional de memória.
O maxmemory
limite de um cache.r3.2xlarge é de 62495129600 bytes e, embora atingimos reserved-memory
rapidamente nosso limite (menos o nosso ), parece-me estranho que o sistema operacional host se sinta pressionado a usar tanta troca aqui e com tanta rapidez, a menos que A Amazon aumentou as configurações de troca do SO por algum motivo. Alguma idéia de por que estaríamos causando tanto uso de troca no ElastiCache / Redis ou solução alternativa que poderíamos tentar?