我正在使用blue-daemons daemons gem的分叉(因为第二个看起来完全被遗弃)以及daemons-rails gem,它将守护进程包装为rails。
问题是我的守护进程在空闲时占用太多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