我正在使用blue-daemons fork of 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