Redis から次のエラーを受信したため、サーバーが繰り返しクラッシュします。
BUSY Redis is busy running a script. You can only call SCRIPT KILL or SHUTDOWN NOSAVE.
しかし、メッセージが参照している「スクリプト」が何なのか、またそのスクリプトをどうやって終了するのかを判断する方法が見つからないようです。どなたか助けていただければ幸いです。
答え1
このエラーは、長時間実行されているサーバー側Luaスクリプトがあることを意味します。このようなスクリプトは、EVAL
またはEVALSHA
Redis コマンド。「長時間実行」とは、スクリプトの実行時間がlua-time-limit
構成ディレクティブで定義されたしきい値 (デフォルトでは 5000 ミリ秒) を超えたことを意味します。
Redis はシングルスレッドなので、タイムアウト後に「-BUSY」エラーで応答し、まだビジー状態であることを示します。スクリプトの実行が終了するまで待つか、(たとえば無限ループがある場合) エラーで提案されたコマンドの 1 つを発行してスクリプトを停止することができます。
SCRIPT KILL
スクリプトが書き込み操作を実行しなかった場合のみ成功します。スクリプトによって書き込みが行われた場合、それを停止する唯一の方法は、 を介して変更を保存せずにサーバーをシャットダウンすることですSHUTDOWN NOSAVE
。