Cómo solucionar el error "Redis está ocupado ejecutando un script"

Cómo solucionar el error "Redis está ocupado ejecutando un script"

Mis servidores fallan repetidamente debido a que recibo el siguiente error de Redis:

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

Sin embargo, parece que no puedo encontrar una manera de determinar cuál es este "script" al que se refiere el mensaje y cómo puedo finalizar el script. Cualquier ayuda sería apreciada.

Respuesta1

El error significa que hay un script Lua del lado del servidor que se está ejecutando desde hace mucho tiempo. Este script es invocado por elEVALo elEVALSHAComandos de Redis. "De larga duración" significa que el tiempo de ejecución del script superó el umbral definido por la lua-time-limitdirectiva de configuración (5000 ms por defecto).

Debido a que Redis tiene un solo subproceso, responde con el error "-BUSY" después del tiempo de espera para indicar que todavía está ocupado. Puede esperar a que finalice la ejecución del script o (si tiene un bucle infinito, por ejemplo) emitir uno de los comandos sugeridos por el error para intentar detener el script.

SCRIPT KILLtendrá éxito sólo si el script no realizó operaciones de escritura. En caso de que el script haya escrito, la única forma de detenerlo es apagando el servidor sin guardar los cambios mediante SHUTDOWN NOSAVE.

información relacionada