Redis
 sql >> Base de données >  >> NoSQL >> Redis

Comment déterminer la fuite de mémoire Redis ?

Voici quelques sources de consommation de mémoire "cachée" dans Redis :

  • Marc a déjà évoqué les tampons entretenus par le maître pour alimenter l'esclave. Si un esclave est en retard sur son maître (parce qu'il fonctionne sur une machine plus lente par exemple), alors de la mémoire sera consommée sur le maître.

  • lorsque des commandes de longue durée sont détectées, Redis les enregistre dans la zone SLOWLOG, ce qui prend de la mémoire. Vous pouvez utiliser la commande SLOWLOG LEN pour vérifier le nombre d'enregistrements que vous avez ici.

  • les tampons de communication peuvent également prendre de la mémoire. Autant que je m'en souvienne, avec les anciennes versions de Redis (et 2.4 est assez ancienne - vous devriez vraiment mettre à niveau), c'était illimité, ce qui signifie que si vous transférez un gros objet à un moment donné, le tampon de communication associé à cette connexion client augmentera et ne jamais rétrécir. S'il y a beaucoup de clients traitant occasionnellement de gros objets, cela pourrait être une explication possible. Si vous utilisez des commandes récupérant des données très volumineuses à partir de Redis (en une seule fois), cela peut également être une explication. Par exemple, une simple commande KEYS * appliquée sur un serveur Redis stockant des millions de clés consommera une quantité importante de mémoire.

Vous avez mentionné que vous avez des objets pouvant atteindre 25 Mo. Vous avez 404 connexions client, si chacune d'elles a besoin d'accéder à de tels objets à un moment donné, cela consommera 10 Go de mémoire.