sql >> Base de Datos >  >> NoSQL >> Redis

¿Cómo determinar la pérdida de memoria de Redis?

Estas son algunas fuentes de consumo de memoria "oculta" en Redis:

  • Marc ya mencionó los buffers mantenidos por el maestro para alimentar al esclavo. Si un esclavo se está quedando atrás de su maestro (porque se ejecuta en una caja más lenta, por ejemplo), se consumirá algo de memoria en el maestro.

  • cuando se detectan comandos de ejecución prolongada, Redis los registra en el área SLOWLOG, lo que requiere algo de memoria. Es posible que desee utilizar el comando SLOWLOG LEN para verificar la cantidad de registros que tiene aquí.

  • Los búferes de comunicación también pueden ocupar memoria. Por lo que recuerdo, con las versiones antiguas de Redis (y la 2.4 es bastante antigua; realmente debería actualizarse), no tenía límites, lo que significa que si transfiere un objeto grande en un punto, el búfer de comunicación asociado a esta conexión de cliente crecerá y nunca encogerse. Si hay muchos clientes que tratan ocasionalmente con objetos grandes, podría ser una posible explicación. Si usa comandos para recuperar datos muy grandes de Redis (de una sola vez), también puede ser una explicación. Por ejemplo, un simple comando KEYS * aplicado en un servidor Redis que almacena millones de claves consumirá una cantidad significativa de memoria.

Mencionaste que tienes objetos tan grandes como 25 MB. Tiene 404 conexiones de cliente, si cada una de ellas necesita acceder a dichos objetos en un momento dado, consumirá 10 GB de memoria.