AR ホームベーカリー

オイラのアウトプット用ホームベーカリー!

sidekiq を強制的に停止する

公式のシグナルリスト

この様に色々書いてある。

github.com

このシグナルリストに記載されたシグナルを送信しても Sidekiq が応答しない状態 (ハングアップしてロードアベレージが暴走している) にどうするか。

-9 で強制停止する

結論、 kill -9 ${PID} を送信して強制停止するしかない。 ちなみに ps ax|grep sidekiq するとわかるけども、複数プロセスが存在するはずなので全部に投げつける必要がある。

注意として、これを実行すると Redis なりに詰まっていたキュー (実行中となる高負荷の原因のキューも) が全部吹き飛ぶ。

ので、処した後にまた同じ処理を実施する必要がある場合は、重複実行が許されないのであれば事前に残りキューを控えておく必要があります。 とはいえそんな応答を返せるほど Redis に余裕があったら kill -9 しとらんわ、という話しもあるので、その時々の判断できめてもろて。

Redis を腑分けする

以下のような手段もあるが、実際に作業したときは redis-cli で接続する余裕すらなかったので試していない。

qiita.com

Redis に詰まっているキューを redis-cli で確認する

これで確認できる (最初の1件)。 rails c 経由で sidekiq が応答を返さないが redis-cli によって、まだ redis 自体には手を加えれる、という状態であればこちらの手段で色々するのが健全だとは思う。

ZRANGE "sidekiq:schedule" 0 0

qiita.com