memory - tutorial - Perfilado del uso de la memoria Redis
redis version (7)
¿Hay alguna herramienta que pueda usar para averiguar cuánta memoria está tomando Redis?
Puede hacerse una idea de la memoria utilizada por los grupos de claves utilizando el poco conocido (y probablemente modificable) comando DEBUG OBJECT.
En Ruby IRB puedes probar esto (advertencia, leerá cada clave, puede tomar algo de tiempo):
keys = $redis.keys;nil
map = Hash.new(0)
keys.each{|k| map[k.split('':'').first] += $redis.debug("object", k).split[4].split('':'')[1].to_i rescue 0};nil
map.sort_by{|x|x[1]}
Esto le mostrará los prefijos de tecla y agregará los bytes ocupados por cada prefijo. Redis en realidad necesita mucha más memoria que la suma, pero esto le dará una idea relativa y le permitirá ver cuál prefijo clave es el más grande.
Después de eso, puede obtener todas las claves para un prefijo con $ redis.keys ("prefijo *") y usar otros comandos de Redis para examinar cada una.
Si también está interesado en cómo se distribuye esta memoria entre sus claves, puede intentar https://github.com/alexdicianu/redis_toolkit . Solo funciona si las teclas siguen este patrón A: B, A: B: C o A: B: *, etc. Muy útiles si está utilizando Redis como motor de almacenamiento en caché de objetos para un CMS como Wordpress o Drupal.
Aquí hay una muestra.
$ ./redis-toolkit report -type memory -name NAME
+----------------------------------------+----------+-----------+----------+
| KEY | NR KEYS | SIZE (MB) | SIZE (%) |
+----------------------------------------+----------+-----------+----------+
| posts:* | 500 | 0.56 | 2.79 |
| post_meta:* | 440 | 18.48 | 92.78 |
| terms:* | 192 | 0.12 | 0.63 |
| options:* | 109 | 0.52 | 2.59 |
Tenga en cuenta que Redis tiene un analizador de memoria integrado desde la versión 4. Uso:
"MEMORY USAGE <key> [SAMPLES <count>] - Estimate memory usage of key"
"MEMORY STATS - Show memory usage details"
"MEMORY PURGE - Ask the allocator to release memory"
"MEMORY MALLOC-STATS - Show allocator internal stats"
Ver https://github.com/gamenet/redis-memory-analyzer
RMA es una herramienta de consola para escanear el espacio clave de Redis en tiempo real y la estadística de uso agregado de la memoria mediante patrones clave. Puede usar estas herramientas sin mantenimiento en los servidores de producción.
Puede escanear por todos o ciertos tipos de Redis seleccionados, como "cadena", "hash", "lista", "establecer", "zset" y usar el patrón coincidente que desee.
También RMA intenta discernir nombres clave por patrones; por ejemplo, si tiene claves como ''usuario: 100'' y ''usuario: 101'' la aplicación seleccionaría ''usuario'' de patrón común: * ''para que pueda analizar la mayoría de los datos angustiados de memoria en tu instancia
Ver https://github.com/sripathikrishnan/redis-rdb-tools
Rdb Tools informa la memoria utilizada por cada par clave = valor en la base de datos. Analiza un archivo de volcado redis y construye un archivo csv. Cada fila en este archivo csv es una clave, y las columnas contienen la memoria consumida por esa clave.
Puede filtrar los resultados en las claves o el tipo de datos. Como la herramienta se ejecuta en un archivo de volcado, no afecta el rendimiento de su servidor redis.
Sin embargo, un punto para recordar: el uso de memoria reportado es una aproximación. Basado en mis experimentos, he encontrado que el uso real de la memoria es aproximadamente un 15% más alto que lo que informa la herramienta.
Redis generará el uso de la memoria cada 5 segundos si el nivel de loglevel
está configurado en verbose
o debug
.
Por ejemplo, este es el resultado en mi base de datos casi vacía:
[49523] 07 Apr 00:38:58 - DB 0: 2 keys (0 volatile) in 4 slots HT.
[49523] 07 Apr 00:38:58 - 1 clients connected (0 slaves), 924416 bytes in use
Puede ver que hay 2 claves en la base de datos y 1 cliente conectado. 924416 bytes están en uso activo. El uso total de la memoria (como se muestra en el campo used_memory_rss
devuelto por el comando INFO
) puede ser un poco mayor (consulte la documentación de INFO para obtener más información).
Los datos almacenados en redis obviamente requieren memoria, pero no es la única razón controlable para el uso de la memoria. Con más bases de datos configuradas, el uso de la memoria aumenta (en mi sistema aproximadamente 450 bytes por base de datos). Cada conexión también usa memoria (en mi sistema alrededor de 8 kilobytes por conexión).