2017-09-25 3 views
0

Je suis récemment tombé sur un SO question où l'op demandé dans quels scénarios redis libère de la mémoire. Il semble qu'ils ont été recommandés un démarrage difficile est un moyen potentiel, mais cela n'a pas été testé dans le cas de Redis. Quelqu'un peut-il me faire savoir si cela fonctionne?Un redémarrage de redis est-il nécessaire pour libérer de la mémoire?

J'ai un environnement en direct, je ne veux pas avoir à redémarrer redis-server, mais son empreinte de mémoire est débilitante maintenant et je suis à la veille d'une migration de serveur. Il est donc important pour moi d'enlever autant de ballonnements que possible (et il y a une tonne de ballonnement).

Répondre

1

Je ne suis pas sûr de savoir ce que vous entendez par "bloat", mais attacher la sortie INFO ALL de votre serveur peut être utile.

Par défaut, Redis utilise jemalloc comme allocateur de mémoire. L'allocateur est en charge de libérer réellement RAM pour l'OS à récupérer, après que Redis le libère. Redis v4 et ci-dessus incluent la possibilité de forcer l'allocateur à purger la RAM libérée (MEMORY PURGE, voir https://github.com/antirez/redis-doc/pull/851).

Indépendamment de la purge, il y a aussi la question de la fragmentation de la mémoire. Alors que v4 a la fonction expérimentale de défragmentation active, un redémarrage est le moyen de "réparer" cela dans les versions précédentes.

Pour limiter un redémarrage et les temps d'arrêt impliqués, utilisez la réplication de Redis pour créer un esclave et basculez vos applications dessus avant de redémarrer le maître d'origine.

+0

Rien de trop mystérieux, par "ballonner" Je voulais juste dire que j'ai un tas de clés qui ne sont plus utilisées. –

+1

Ah - soit être plus stricte w. entretien et/ou utilisation TTLs :) –

+0

Les mots les plus vrais n'ont jamais été parlés –