公式のシグナルリスト
この様に色々書いてある。
このシグナルリストに記載されたシグナルを送信しても Sidekiq が応答しない状態 (ハングアップしてロードアベレージが暴走している) にどうするか。
-9
で強制停止する
結論、 kill -9 ${PID}
を送信して強制停止するしかない。 ちなみに ps ax|grep sidekiq
するとわかるけども、複数プロセスが存在するはずなので全部に投げつける必要がある。
注意として、これを実行すると Redis なりに詰まっていたキュー (実行中となる高負荷の原因のキューも) が全部吹き飛ぶ。
ので、処した後にまた同じ処理を実施する必要がある場合は、重複実行が許されないのであれば事前に残りキューを控えておく必要があります。 とはいえそんな応答を返せるほど Redis に余裕があったら kill -9
しとらんわ、という話しもあるので、その時々の判断できめてもろて。
Redis を腑分けする
以下のような手段もあるが、実際に作業したときは redis-cli で接続する余裕すらなかったので試していない。
Redis に詰まっているキューを redis-cli で確認する
これで確認できる (最初の1件)。
rails c
経由で sidekiq が応答を返さないが redis-cli
によって、まだ redis 自体には手を加えれる、という状態であればこちらの手段で色々するのが健全だとは思う。
ZRANGE "sidekiq:schedule" 0 0