Abbiamo riscontrato problemi con lo scambio di istanze di ElastiCache Redis. Amazon sembra avere un rozzo monitoraggio interno in atto che nota picchi di utilizzo degli swap e riavvia semplicemente l'istanza di ElastiCache (perdendo così tutti i nostri oggetti memorizzati nella cache). Ecco il grafico di BytesUsedForCache (linea blu) e SwapUsage (linea arancione) sulla nostra istanza ElastiCache negli ultimi 14 giorni:
Puoi vedere il modello di crescente utilizzo degli swap che sembra innescare i riavvii della nostra istanza ElastiCache, in cui perdiamo tutti i nostri elementi memorizzati nella cache (BytesUsedForCache scende a 0).
La scheda "Eventi cache" della nostra dashboard ElastiCache contiene voci corrispondenti:
ID sorgente | Digita | Data | Evento
cache-istanza-id | cluster di cache | Mar 22 set 07:34:47 GMT-400 2015 | Nodo cache 0001 riavviato
cache-istanza-id | cluster di cache | Mar 22 set 07:34:42 GMT-400 2015 | Errore durante il riavvio del motore della cache sul nodo 0001
cache-istanza-id | cluster di cache | Dom 20 Set 11:13:05 GMT-400 2015 | Nodo cache 0001 riavviato
cache-istanza-id | cluster di cache | Gio 17 set 22:59:50 GMT-400 2015 | Nodo cache 0001 riavviato
cache-istanza-id | cluster di cache | Mer 16 set 10:36:52 GMT-400 2015 | Nodo cache 0001 riavviato
cache-istanza-id | cluster di cache | Mar 15 set 05:02:35 GMT-400 2015 | Nodo cache 0001 riavviato
(tagliare le voci precedenti)
SwapUsage : nell'uso normale, né Memcached né Redis devono eseguire swap
Le nostre impostazioni pertinenti (non predefinite):
- Tipo di istanza:
cache.r3.2xlarge
maxmemory-policy
: allkeys-lru (in precedenza avevamo usato la volatile-lru predefinita senza troppe differenze)maxmemory-samples
: 10reserved-memory
: 2500000000- Controllando il comando INFO sull'istanza, vedo
mem_fragmentation_ratio
tra 1.00 e 1.05
Abbiamo contattato il supporto AWS e non abbiamo ricevuto molti consigli utili: hanno suggerito di aumentare ulteriormente la memoria riservata (il valore predefinito è 0 e abbiamo riservato 2,5 GB). Non abbiamo repliche o snapshot impostati per questa istanza della cache, quindi credo che nessun BGSAVE dovrebbe verificarsi e causare ulteriore utilizzo della memoria.
Il maxmemory
limite di un cache.r3.2xlarge è di 62495129600 byte, e sebbene colpiamo il nostro cap (meno il nostro reserved-memory
) rapidamente, mi sembra strano che il sistema operativo host si senta pressato per usare così tanto swap qui, e così rapidamente, a meno che Amazon ha migliorato le impostazioni di swappiness del sistema operativo per qualche motivo. Qualche idea sul perché dovremmo causare un così grande utilizzo di swap su ElastiCache / Redis o una soluzione alternativa che potremmo provare?