2011-04-03 14 views

Respuesta

33

Intente ver el comando INFO. También recomiendo leer el artículo this sobre el uso de la memoria Redis, donde puede encontrar más información sobre la cantidad de memoria que está tomando una estructura de datos particular.

6

Redis generará el uso de memoria cada 5 segundos si loglevel está configurado en verbose o debug.

Por ejemplo, esta es la salida de mi base de datos casi vacío:

[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 

Se puede ver que hay 2 llaves 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).

27

Ver https://github.com/sripathikrishnan/redis-rdb-tools

Rdb Herramientas informes de 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 a 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.

+0

Esto fue de gran ayuda, gracias. –

-1

Puede hacerse una idea de la memoria utilizada por los grupos de claves utilizando el poco conocido (y probablemente modificable) comando DEBUG OBJECT.

En Rubí IRB puede probar esta (advertencia, leerá cada llave, puede tomar algún 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 clave y agregar los bytes tomadas 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.

+0

, no solo las claves de valor clave toman tiempo. otro tipo de estructuras de datos no aparecerán en el comando 'keys'. –

1

Ver https://github.com/gamenet/redis-memory-analyzer

RMA es una herramienta de consola para escanear el espacio clave Redis en tiempo real y estadísticas de uso de memoria agregada por los patrones clave. Puede usar estas herramientas sin mantenimiento en los servidores de producción.

Puede escanear en todos o en determinados tipos de Redis como "cadena", "hash", "lista", "establecer", "zset" y usar patrones coincidentes como desee.

También RMA intenta discernir nombres de teclas 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 más datos angustiados de memoria en su instancia.

2

Tenga en cuenta que Redis got a integrated memory analyzer 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" 
0

Si también está interesado en cómo esta memoria se distribuye entre las llaves, se puede tratar 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 un ejemplo.

$ ./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 | 
Cuestiones relacionadas