Este artigo é um artigo espelhado de tradução automática, por favor clique aqui para ir para o artigo original.

Vista: 47166|Resposta: 1

[Fonte] Redis MISCONF O Redis está configurado para salvar snapshots do RDB

[Copiar link]
Postado em 2021-5-14 21:18:50 | | | |
Usando o StackExchange.Redis para manipular o cache redis, o erro é o seguinte:

StackExchange.Redis.RedisServerException: MISCONF Redis is configured to save RDB snapshots, but is currently not able to persist on disk. Commands that may modify the data set are disabled. Please check Redis logs for details about the error.

Solução temporária, modificar o arquivo redis.windows.conf,O serviço Redis precisa ser reiniciado, define da seguinte forma:
Se você não quiser reiniciar o serviço Redis, pode usar o comando redis-cli para configurá-lo da seguinte forma:



A explicação é a seguinte:
# Por padrão, o Redis deixará de aceitar escritas se os snapshots RDB estiverem ativados
# (pelo menos um ponto de salvamento) e o último save em segundo plano falhou.
# Isso fará o usuário perceber (de forma difícil) que os dados não estão persistindo
# No disco corretamente, caso contrário, é provável que ninguém perceba e alguns
# O desastre vai acontecer.
#
# Se o processo de salvar em segundo plano começar a funcionar novamente, Redis vai
# permitir escritas automaticamente novamente.
#
# No entanto, se você configurou seu monitoramento adequado do servidor Redis
# e persistência, você pode querer desativar esse recurso para que o Redis
# continuar funcionando normalmente mesmo que haja problemas com o disco,
# Permissões, e assim por diante.
Simplificando: o Redis precisa fazer um fork em um processo principal para evitar que ele finja a morte ao salvar dados no disco rígido, e então completar a operação de salvar dados no disco rígido no processo; se o processo principal usa 4GB de memória, são necessários mais 4GB quando o subprocesso do fork for necessário; nesse momento, a memória não é suficiente, o fork falha, e então o disco rígido de salvamento de dados também falha.

Para visualizar os logs do Redis, você precisa configurar o redis.windows.conf da seguinte forma:

# Especifique o nome do arquivo de log. Além disso, 'stdout' pode ser usado para forçar
# Redis para registrar a saída padrão.
arquivo de registro "E:/Redis-x64-3.2.100/redis.txt"

As exceções logarítmicas são as seguintes:

[8984] 14 de maio 14:05:09.060 * Salvamento em segundo plano iniciado por pid 8672
[8672] 14 de maio 14:05:09.169 #
A versão para Windows do Redis reserva memória heap do arquivo de paginação do sistema
para compartilhamento com o processo bifurcado usado em operações de persistência. No momento, não há espaço livre contíguo suficiente disponível no
arquivo de paginação do sistema. Você pode aumentar o tamanho do arquivo de paginação do sistema.
Às vezes, um reboot desfragmenta o arquivo de paginação do sistema o suficiente para
essa operação foi concluída com sucesso.

Redis não pode continuar. Sair.
[8984] 14 de maio 14:05:09.278 # operação de bifurcação falhada



Após análise, descobriu-se que o problema com a configuração do tamanho máximo do heap "maxheap" era devido à memória disponível insuficiente.

Solução

Abra o arquivo de configuração do Reddis "redis.windows.conf" e encontre a seguinte seção de código:


# O heap Redis deve ser maior que o valor especificado pelo maxmemory
# flag, já que o alocador de heap tem seus próprios requisitos de memória e
# A fragmentação do monte é inevitável. Se apenas a flag maxmemory for
# especificado, o maxheap será definido em 1,5*maxmemory. Se a flag de maxheap for
# especificado junto com maxmemory, a flag do maxheap será automaticamente
# aumentado se for menor que 1,5*maxmemory.
#  
# maxheap <bytes>

Adicionar essa configuração é bom,O serviço Redis não começa!!!!!!!
O valor padrão é: maxheap 1024000000≈976,56M

Não encontrei esse comentário no arquivo de conf, achei algo assim:
# Não use mais memória do que a quantidade especificada de bytes.
# Quando o limite de memória for atingido, Redis tentará remover chaves
# De acordo com a política de despejo selecionada (veja maxmemory-policy).
#
# Se Redis não pode remover chaves conforme a política, ou se a política for
# definido para 'noeviction', Redis começará a responder com erros nos comandos
# que usariam mais memória, como SET, LPUSH, e assim por diante, e continuarão
# para responder a comandos somente leitura como GET.
#
# Essa opção geralmente é útil ao usar o Redis como cache LRU, ou para definir
# Um limite rígido de memória para uma instância (usando a política de 'noeviction').
#
# AVISO: Se você tem escravos conectados a uma instância com maxmemory ativado,
# O tamanho dos buffers de saída necessários para alimentar os escravos é subtraído
# a partir da contagem de memória usada, de modo que problemas de rede / resincronizações
# não acionar um loop onde as chaves são removidas, e consequentemente a saída
# buffer de escravos está cheio com DELs de chaves despejadas, desencadeando a exclusão
# de mais chaves, e assim por diante até que o banco de dados esteja completamente vazio.
#
# Em resumo... Se você tiver escravos anexados, sugere-se que você coloque um escravo inferior
# limite para maxmemory para que haja alguma RAM livre no sistema para o slave
# buffers de saída (mas isso não é necessário se a política for 'noeviction').
#
# AVISO: não configurar maxmemory fará com que Redis termine com um
# Exceção fora de memória se o limite do heap for atingido.
#
# NOTA: como o Redis usa o arquivo de paginação do sistema para alocar a memória do heap,
# o uso da memória do Conjunto de Trabalho mostrado pelo Gerenciador de Tarefas do Windows ou por outros
# ferramentas como o ProcessExplorer nem sempre serão precisas. Por exemplo, à direita
# após um save em segundo plano dos arquivos RDB ou AOF, o valor do conjunto de trabalho
# pode cair significativamente. Para verificar a quantidade correta de memória usada
# pelo redis-server para armazenar os dados, use o comando cliente INFO. A INFORMAÇÃO
O comando # mostra apenas a memória usada para armazenar os dados Redis, não o extra
# memória usada pelo processo do Windows para seus próprios requisitos. Th3 quantidade extra
# de memória não reportada pelo comando INFO pode ser calculada subtraindo o
# Conjunto de Trabalho de Pico reportado pelo Gerenciador de Tarefas do Windows e pelo used_memory_peak
# reportado pelo comando INFO.
#
# maxmemory <bytes>

Aviso: Se o limite do heap for atingido, não definir maxmemory fará com que o Redis termine com uma exceção por falta de memória.

Nota: Devido aO Redis utiliza arquivos de paginação do sistema para alocar memória heap

O Gerenciador de Tarefas do Windows ou outras ferramentas como o Explorador de Processos nem sempre mostram o uso preciso da memória do conjunto de funcionários. Em termos simples,O uso de memória mostrado pelo Gerenciador de Tarefas não é preciso!!!

Use o comando info para consultar da seguinte forma:

# Memória
used_memory:2011338768
used_memory_human:1,87G
used_memory_rss:2011279992
used_memory_rss_human:1,87G
used_memory_peak:2011338768
used_memory_peak_human:1,87G
total_system_memory:0
total_system_memory_human:0B
used_memory_lua:37888
used_memory_lua_human:37,00K
maxmemory:0
maxmemory_human:0B
maxmemory_policy:noeviction
mem_fragmentation_ratio:1,00
mem_allocator:jemalloc-3.6.0



As configurações são as seguintes:

1073741824 bytes = 1G
Após a configuração, o cliente .net redis adiciona um erro de cache da seguinte forma:

Comando OOM não é permitido quando usado memória > 'maxmemory'.
# POLÍTICA DE MAXMEMORY: como o Redis vai selecionar o que remover quando maxmemory
# é alcançado. Você pode escolher entre cinco comportamentos:
#
# volatile-lru -> remover a chave com um conjunto expire usando um algoritmo LRU
# allkeys-lru -> remover qualquer chave de acordo com o algoritmo LRU
# Volátil-aleatório -> remover uma chave aleatória com um conjunto expire
# todas as chaves-aleatórias -> remover uma chave aleatória, qualquer chave
# volatile-ttl -> remover a chave com o tempo de expiração mais próximo (TTL menor)
# Noeviction - > não expiram, apenas retornam erro nas operações de escrita
#
# Nota: com qualquer uma das políticas acima, Redis retornará um erro ao escrever
# Operações, quando não há chaves adequadas para despejo.
#
# Na data de escrita, esses comandos são: set setnx setex append
# Incr Decr rpush lpush rpushx lpushx linsert lset rpoplpush sadd
# sinter sinterstore sunion sunionstore sdiff sdiff sdiff sdiff zadd zincrby
# zunionstore zinterstore hset hsetnx hmset hincrby incrby decrby
# getset mset msetnx exec sort
#
# O padrão é:
#
# política de noeviction da MaxMemory
#MAXMEMORY策略: Quando MAXMEMORY

#到达. Você pode escolher entre cinco comportamentos:

#

#volatile LRU-> usa o algoritmo LRU para remover chaves com conjuntos de expiração

#allkeys LRU-> excluir qualquer chave de acordo com o algoritmo LRU

#volatile aleatório - > remover chaves aleatórias com conjuntos expirados

#allkeys > aleatórios excluir chaves aleatórias, chaves arbitrárias

#volatile TTL-> Exclua a chave com o tempo de expiração mais próximo (TTL menor)

#noeviction-> não expira, apenas retorna erros na operação de escrita

#

#注意: Para qualquer uma das estratégias acima, o Redis retorna um erro ao escrever

#操作, quando não há chave adequada para despejo.

#

#在编写之日, esses comandos são: set setnx setex append

#递增递减rpush lpushx lpushx linsert lset rpoplpush sadd

#烧结店sunion sunionstore sdiff sdiff sdiffstore zadd zincrby

#zunionstore Zinterstore Hset Hset, HMSET Hincrby Incrby Decrby

#getset mset msetNX exec sorting

#

#默认值为:

#

#maxmemory策略无效
Você também precisa configurar as seguintes configurações:

A configuração padrão do redis é muito conservadora, ou seja, ela não é armazenada após o limite de memória ser ultrapassado, e a política pode ser alterada para o algoritmo LRU (o algoritmo menos usado recentemente) – as informações recém-armazenadas substituirão as antigas.

Revisar:

Diferença de persistência Redis entre RDB e AOF
https://www.itsvse.com/thread-9555-1-1.html

A instalação do Docker roda o cache Redis
https://www.itsvse.com/thread-8995-1-1.html

Exemplos explicam o que são penetração de cache, avalanche de cache e quebra de cache Reddis
https://www.itsvse.com/thread-8968-1-1.html

Curingas da Redis para deletar chaves em massa
https://www.itsvse.com/thread-7957-1-1.html

Instalação do CentOS 7 Tutorial Redis 5.0.3
https://www.itsvse.com/thread-7201-1-1.html

Instale a extensão Redis sob php 5.5.7 no CentOS
https://www.itsvse.com/thread-7200-1-1.html

Quantas chaves podem ser armazenadas em uma instância Redis, e quais são as chaves e valores máximos?
https://www.itsvse.com/thread-6848-1-1.html

A questão dos redis chineses não pode ser exibida corretamente
https://www.itsvse.com/thread-5032-1-1.html

O Redis permite acesso remoto
https://www.itsvse.com/thread-5011-1-1.html

O Windows falha em iniciar o serviço Redis, erro 1067: Processo termina inesperadamente.
https://www.itsvse.com/thread-5010-1-1.html

CentOS instalou o Redis 4.0.8
https://www.itsvse.com/thread-4614-1-1.html

O Redis configura senhas de conexão remota e acesso
https://www.itsvse.com/thread-4101-1-1.html

O Redis esvazia o cache de dados
https://www.itsvse.com/thread-4027-1-1.html

Configuração de persistência do Redis e persistência desligada
https://www.itsvse.com/thread-4012-1-1.html

A diferença entre save e bgsave no redis
https://www.itsvse.com/thread-4010-1-1.html

Redis dois métodos e princípios de persistência
https://www.itsvse.com/thread-4009-1-1.html

Redis tem três formas de começar
https://www.itsvse.com/thread-4008-1-1.html

Método Redis para ocultar janelas de linha de comando
https://www.itsvse.com/thread-2988-1-1.html

Redis Problema do Hash do Hash do Valor do Hash
https://www.itsvse.com/thread-2587-1-1.html

5 Coisas Que Você Deve Saber Antes de Usar Redis
https://www.itsvse.com/thread-2580-1-1.html

O Redis modifica o número de porta padrão e define a senha de acesso
https://www.itsvse.com/thread-2577-1-1.html

Redis Windows 64-bit download, endereço oficial de download
https://www.itsvse.com/thread-2576-1-1.html

O Redis usa scripts Lua para explicações detalhadas
https://www.itsvse.com/thread-9634-1-1.html

Teste de desempenho Redis Benchmark
https://www.itsvse.com/thread-9645-1-1.html

(Fim)






Anterior:Julgamento NPOI sobre o tipo de data da célula
Próximo:Explicação detalhada do Excel da Operação NPOI
 Senhorio| Postado em 2023-7-12 21:08:55 |
Estratégias de eliminação dos oito de memória Redis
https://www.itsvse.com/thread-10626-1-1.html
Disclaimer:
Todo software, material de programação ou artigos publicados pela Code Farmer Network são apenas para fins de aprendizado e pesquisa; O conteúdo acima não deve ser usado para fins comerciais ou ilegais, caso contrário, os usuários terão todas as consequências. As informações deste site vêm da Internet, e disputas de direitos autorais não têm nada a ver com este site. Você deve deletar completamente o conteúdo acima do seu computador em até 24 horas após o download. Se você gosta do programa, por favor, apoie um software genuíno, compre o registro e obtenha serviços genuínos melhores. Se houver qualquer infração, por favor, entre em contato conosco por e-mail.

Mail To:help@itsvse.com