レールのデーモンをラップするdaemons-rails gemとともに、 daemons gemのblue-daemonsフォークを使用しています(2番目のものは完全に放棄されているように見えるため) 。
問題は、デーモンがアイドル状態のときに CPU を大量に消費することです (実際にジョブを実行している時間の 10 ~ 20 倍)。
アイドルであるということは、特別なフラグを持っていることを意味します - Status.active?
。の場合Status.active?
はtrue
ジョブを実行し、 の場合はfalse
10 秒間スリープして、while($running) do
ブロックの次のステップを繰り返し、ステータスを何度も確認します。
非常に機密性の高いデータがあり、プロセスがそれを壊したくないので、ジョブを強制的に停止したくありません。その高い CPU 使用率を処理する良い方法はありますか? Sidekiq を試してみましたが、主な目的はオンデマンドまたはスケジュールに従ってジョブを実行することのようですが、デーモンをノンストップで実行する必要があります。
$running = true
Signal.trap("TERM") do
$running = false
end
while($running) do
while Status.active? do
..... DO LOTS OF WORK .....
else
sleep 10
end
end