Un análisis y solución de problemas de redis OOM, análisis de instalación de rdbtools redis memory

 

Es inevitable encontrar proyectos más embarazosos. La calidad es realmente desordenada y el uso de redis también es desordenado. Entonces habrá un problema. ¿Qué debo hacer si la memoria no lo soporta?

No hay alta disponibilidad, solo un redis desnudo (el plan de alta disponibilidad se discutirá la próxima vez)

Tabla de contenido

Pasos de análisis

Solución de emergencia OOM:

Cómo encontrar la gran llave

Instalar rdbtools

Utilice redis-rdb-tools para generar una instantánea de memoria:


Pasos de análisis

Ingrese redis, vea el uso de la memoria

redis -a 密码
info memory

El servidor asigna memoria 5G, maxmemory es 5G y 4.66G está disponible, y todo se agota cuando se produce OOM; para un análisis detallado, puede preguntar a la próxima madre

 

Solución de emergencia OOM :

Aumente la memoria máxima, config set maxmemory xxx

Establecer estrategia de eliminación de memoria: lo configuré en allkeys-lru

Redis5.0 define varias estrategias para hacer frente a esta situación:

(1) Volatile-lru: Seleccione los datos usados ​​menos recientemente del conjunto de datos con el tiempo de vencimiento establecido y elimínelos.

(2) Volatile-ttl: seleccione los datos a caducar del conjunto de datos con el tiempo de caducidad establecido.

(3) Volátil-aleatorio: seleccione arbitrariamente los datos que se eliminarán del conjunto de datos que ha establecido el tiempo de vencimiento.

(4) Volatile-lfu: seleccione los datos utilizados con menos frecuencia del conjunto de datos con el tiempo de vencimiento establecido y elimínelos.

(5) allkeys-lru: seleccione los datos usados ​​menos recientemente del conjunto de datos para eliminar

(6) allkeys-lfu: seleccione los datos utilizados con menos frecuencia del conjunto de datos y elimínelos.

(7) allkeys-random: seleccione arbitrariamente datos para eliminar del conjunto de datos (server.db [i] .dict)

(8) no-enviction (desalojo): prohíbe el desalojo de datos, esta es también la estrategia predeterminada. Esto significa que cuando la memoria no es suficiente para acomodar los nuevos datos, la nueva operación de escritura reportará un error, la solicitud puede continuar y la tarea en línea no puede continuar. La estrategia de no expulsión puede asegurar que los datos no se pierdan.

Estos ocho tipos se pueden dividir aproximadamente en 4 categorías, lru, lfu, random y ttl.

 

Al usar las tres estrategias de volatile-lru, volatile-random y volatile-ttl, si no se puede eliminar ninguna clave, se devolverá un error como noeviction


Pero esta es solo una solución temporal, necesita saber cuál es la causa raíz

Pregunta: ¿Por qué 5G no es suficiente? Debe haber una clave grande, o demasiado uso, no se establece un tiempo de vencimiento

De acuerdo, 1. Descubra la clave grande, 2. Reduzca el almacenamiento en caché innecesario, 3. Debe establecer el tiempo de vencimiento

 

Cómo encontrar la gran llave

Busqué en Internet durante mucho tiempo herramientas útiles, python útil, comandos útiles; si está interesado, puede leer este artículo: https://www.cnblogs.com/yqzc/p/12425533.html

Aquí les presento que es bastante conveniente analizar con rdbtools

Instalar rdbtools

pip install rdbtools install

Si pip no está instalado, instale pip, consulte el tutorial: https://blog.csdn.net/Goligory/article/details/106033972

 

clon de git https://github.com/sripathikrishnan/redis-rdb-tools

cd redis-rdb-tools

instalación de python3 setup.py

Instalar de la siguiente manera 

Utilice redis-rdb-tools para generar una instantánea de memoria:

rdb -c memory dump.rdb> memory.csv

Es posible que no se encuentre Dump.rdb en este momento

Solución:

Iniciar sesión en redis

Comando: guardar

Comando (busque el directorio de instalación): config get dir

Salga, haga cd al directorio de instalación y verá dump.rdb

Ejecute en el directorio dump.rdb: rdb -c memory dump.rdb> memory.csv, el archivo csv está en la carpeta actual, puede exportarlo para verlo directamente, el efecto es el siguiente

 

También puede usar SQLite para analizar archivos csv. No hablaré de eso aquí. Si está interesado, puede preguntarle a Du Niang.

 

 

 

Referencia: https://www.cnblogs.com/aresxin/p/9014617.html

 

Supongo que te gusta

Origin blog.csdn.net/Goligory/article/details/106033551
Recomendado
Clasificación