Hemos tenido problemas continuos con nuestro intercambio de instancias de ElastiCache Redis. Amazon parece tener una supervisión interna cruda que advierte picos de uso de intercambio y simplemente reinicia la instancia de ElastiCache (perdiendo así todos nuestros elementos en caché). Aquí está el gráfico de BytesUsedForCache (línea azul) y SwapUsage (línea naranja) en nuestra instancia de ElastiCache durante los últimos 14 días:
Puede ver el patrón de uso creciente de intercambio que parece provocar el reinicio de nuestra instancia de ElastiCache, en el que perdemos todos nuestros elementos almacenados en caché (BytesUsedForCache cae a 0).
La pestaña 'Eventos de caché' de nuestro panel de control de ElastiCache tiene las entradas correspondientes:
ID de fuente | Tipo | Fecha | Evento
id-instancia-caché | clúster de caché | Martes 22 de septiembre 07:34:47 GMT-400 2015 | Nodo de caché 0001 reiniciado
id-instancia-caché | clúster de caché | Martes 22 de septiembre 07:34:42 GMT-400 2015 | Error al reiniciar el motor de caché en el nodo 0001
id-instancia-caché | clúster de caché | Dom 20 sep 11:13:05 GMT-400 2015 | Nodo de caché 0001 reiniciado
id-instancia-caché | clúster de caché | Jue 17 sep 22:59:50 GMT-400 2015 | Nodo de caché 0001 reiniciado
id-instancia-caché | clúster de caché | Mié 16 sep 10:36:52 GMT-400 2015 | Nodo de caché 0001 reiniciado
id-instancia-caché | clúster de caché | Martes 15 de septiembre 05:02:35 GMT-400 2015 | Nodo de caché 0001 reiniciado
(recortar entradas anteriores)
SwapUsage : en uso normal, ni Memcached ni Redis deberían realizar intercambios
Nuestra configuración relevante (no predeterminada):
- Tipo de instancia:
cache.r3.2xlarge
maxmemory-policy
: allkeys-lru (habíamos estado usando el volátil por defecto previamente sin mucha diferencia)maxmemory-samples
: 10reserved-memory
: 2500000000- Comprobando el comando INFO en la instancia, veo
mem_fragmentation_ratio
entre 1.00 y 1.05
Nos hemos puesto en contacto con el soporte de AWS y no obtuvimos muchos consejos útiles: sugirieron aumentar aún más la memoria reservada (el valor predeterminado es 0 y tenemos 2,5 GB reservados). No tenemos réplicas o instantáneas configuradas para esta instancia de caché, por lo que creo que no deberían estar ocurriendo BGSAVE y causar un uso adicional de memoria.
El maxmemory
límite de un caché.r3.2xlarge es 62495129600 bytes, y aunque alcanzamos nuestro límite (menos nuestro reserved-memory
) rápidamente, me parece extraño que el sistema operativo host se sienta presionado para usar tanto intercambio aquí, y tan rápido, a menos que Amazon ha aumentado la configuración de intercambio de SO por alguna razón. ¿Alguna idea de por qué estaríamos causando tanto uso de intercambio en ElastiCache / Redis, o una solución que podríamos intentar?