Redis
 sql >> Database >  >> NoSQL >> Redis

Come determinare la perdita di memoria Redis?

Ecco alcune fonti di consumo di memoria "nascosta" in Redis:

  • Marc ha già menzionato i buffer mantenuti dal master per alimentare lo schiavo. Se uno slave è in ritardo rispetto al suo master (perché, ad esempio, funziona su una macchina più lenta), allora della memoria verrà consumata sul master.

  • quando vengono rilevati comandi di lunga durata, Redis li registra nell'area SLOWLOG, che occupa un po' di memoria. Potresti voler usare il comando SLOWLOG LEN per controllare il numero di record che hai qui.

  • i buffer di comunicazione possono anche occupare memoria. Per quanto mi ricordo, con le vecchie versioni di Redis (e la 2.4 è piuttosto vecchia - dovresti davvero aggiornare), era illimitato, il che significa che se trasferisci un grande oggetto in un punto, il buffer di comunicazione associato a questa connessione client aumenterà e non rimpicciolirsi mai. Se ci sono molti clienti che si occupano occasionalmente di oggetti di grandi dimensioni, potrebbe essere una possibile spiegazione. Se usi comandi che recuperano dati molto grandi da Redis (in un colpo solo), può anche essere una spiegazione. Ad esempio, un semplice comando KEYS * applicato su un server Redis che memorizza milioni di chiavi consumerà una quantità significativa di memoria.

Hai detto che hai oggetti grandi come 25 MB. Hai 404 connessioni client, se ognuna di esse ha bisogno di accedere a tali oggetti in un determinato momento, consumerà 10 GB di memoria.