Como corrigir o erro “Redis está ocupado executando um script”

Como corrigir o erro “Redis está ocupado executando um script”

Meus servidores estão travando repetidamente devido ao recebimento do seguinte erro do Redis:

BUSY Redis is busy running a script. You can only call SCRIPT KILL or SHUTDOWN NOSAVE.

No entanto, não consigo encontrar uma maneira de determinar a que "script" a mensagem se refere e como posso encerrar o script. Qualquer ajuda seria apreciada.

Responder1

O erro significa que há um script Lua de longa duração no lado do servidor. Tal script é invocado peloEVALou oEVALSHAComandos Redis. "Long run" significa que o tempo de execução do script excedeu o limite definido pela lua-time-limitdiretiva de configuração (5000ms por padrão).

Como o Redis é de thread único, ele responde com o erro "-BUSY" após o tempo limite para indicar que ainda está ocupado. Você pode esperar o término da execução do script ou (se tiver um loop infinito, por exemplo) emitir um dos comandos sugeridos pelo erro para tentar interromper o script.

SCRIPT KILLterá sucesso somente se o script não executou nenhuma operação de gravação. Caso as gravações tenham sido feitas pelo script, a única maneira de interrompê-lo é desligando o servidor sem salvar as alterações via SHUTDOWN NOSAVE.

informação relacionada