Назад | Перейти на главную страницу

Как исправить ошибку «Redis занят выполнением сценария»

Мои серверы постоянно выходят из строя из-за получения следующей ошибки от Redis:

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

Однако я не могу найти способ определить, что это за «сценарий», о котором идет речь в сообщении, и как я могу завершить его. Любая помощь будет оценена.

Ошибка означает, что существует длительный серверный Lua-скрипт. Такой сценарий вызывается EVAL или EVALSHA Команды Redis. "Длительное выполнение" означает, что время выполнения скрипта превысило порог, определенный lua-time-limit директива конфигурации (по умолчанию 5000 мс).

Поскольку Redis является однопоточным, он отвечает ошибкой «-BUSY» по истечении тайм-аута, указывая на то, что он все еще занят. Вы можете либо дождаться завершения выполнения сценария, либо (если у вас, например, бесконечный цикл) выполнить одну из команд, предложенных ошибкой, чтобы попытаться остановить сценарий.

SCRIPT KILL будет успешным только в том случае, если скрипт не выполнил никаких операций записи. В случае, если запись была произведена сценарием, единственный способ остановить это - выключить сервер без сохранения изменений через SHUTDOWN NOSAVE.