Minha instância do redis parece estar ficando muito grande e eu gostaria de descobrir qual dos vários bancos de dados que tenho nele consome quanta memória. O INFO
comando do Redis apenas me mostra o tamanho total e o número de chaves por banco de dados, o que não me dá muita percepção ... Portanto, quaisquer ferramentas / ideias que me forneçam mais informações ao monitorar o servidor redis seriam bem-vindas.
A documentação do Redis não me mostra nenhum comando que possa retornar a memória consumida de certas chaves, então eu acho que se algum código com erros escreveria muito "lixo" para redis, isso poderia ser realmente difícil de encontrar ...
A solução dos comentários merece sua própria resposta:
fonte
a
com um valor de 4 GB, mas isso não apareceria em bigkeys. (isso está acontecendo por gist.github.com/michael-grunder/9257326 e docs.redislabs.com/latest/ri/memory-optimizations/… )MEMORY USAGE key
comando fornece o número de bytes que uma chave e seu valor requerem para serem armazenados na RAM.O uso relatado é o total de alocações de memória para dados e despesas administrativas que uma chave seu valor exige (documentação de redis da fonte)
fonte
Dê uma olhada neste projeto, ele produz algumas estatísticas interessantes sobre espaços-chave com base em regexs e prefixos. Ele usa o
DEBUG OBJECT
comando e verifica o banco de dados, identificando grupos de chaves e estimando a porcentagem de espaço que estão ocupando.https://github.com/snmaynard/redis-audit
A saída é semelhante a esta:
Ou este: https://github.com/sripathikrishnan/redis-rdb-tools que faz uma análise completa em todo o keyspace analisando um arquivo dump.rdb offline. Este também funciona bem. Ele pode fornecer o tamanho médio / mínimo / máximo para as entradas em seu banco de dados, e até fará isso com base em um prefixo.
fonte
Você pode achar muito útil experimentar as chaves Redis e agrupá-las por tipo. Salvatore escreveu uma ferramenta chamada redis-sampler que emite cerca de 10.000
RANDOMKEY
comandos seguidos porTYPE
teclas recuperadas. Em questão de segundos ou minutos, você deve obter uma visão bastante precisa da distribuição dos tipos de chave.Eu escrevi uma extensão (infelizmente não em qualquer lugar de código aberto porque é relacionada ao trabalho), que adiciona um pouco de introspecção de nomes de chave via regexs que dão uma ideia de quais tipos de chaves de aplicativo (de acordo com qualquer estrutura de nomenclatura que você usando), são armazenados no Redis. Combinado com a saída mais geral do redis-sampler, isso deve lhe dar uma ideia extremamente boa do que está acontecendo.
fonte
redis-cli --bigkeys
Talvez você possa fazer alguma introspecção no arquivo db. O protocolo é relativamente simples (mas não bem documentado), então você pode escrever um analisador para ele para determinar quais chaves individuais estão ocupando muito espaço.
Novas sugestões:
Já experimentou usar
MONITOR
para ver o que está sendo escrito, ao vivo? Talvez você possa encontrar o problema com os dados em movimento.fonte
INFO
eMONITOR
, mas o maior problema é, que quando não estava assistindo o redis cresceu muito ...Você pode usar o aplicativo .net https://github.com/abhiyx/RedisSizeCalculator para calcular o tamanho da chave redis,
Sinta-se à vontade para dar seus comentários sobre o mesmo
fonte
Eu geralmente prefiro o método de amostragem de chave para solucionar esses cenários.
Por exemplo:-
fonte
Que tal redis-cli get KEYNAME | wc -c
fonte