长期运行的Sidekiq工作一直在濒临死亡

时间:2012-07-01 07:10:03

标签: ruby-on-rails background-process resque sidekiq

我正在使用sidekiq gem来处理Rails中的后台作业。出于某种原因,工作只是暂停了一段时间 - 这个过程要么变得没有反应,出现在top但没有多少,或者神秘地消失,没有错误(没有报告给airbrake.io)。

有没有人有这方面的经验?

2 个答案:

答案 0 :(得分:7)

使用TTIN信号获取流程中所有线程的回溯,这样您就可以找出工人被卡住的位置。

https://github.com/mperham/sidekiq/wiki/Signals

答案 1 :(得分:1)

我经历过这种情况,并没有找到解决方案/根本原因。

我无法彻底解决这个问题,但想出了一个黑客。

我将God配置为监视我的Sidekiq进程,并在文件更改时重新启动它们。

然后我设置了一个每5分钟运行一次的Cron作业,该作业检查了当前所有Sidekiq工作人员的队列。如果某些百分比的工人过去的开始时间<= 5分钟,则意味着那些工人因某种原因而挂起。如果发生这种情况,我触摸了一个文件,让上帝重启Sidekiq。对我来说,5分钟是理想的,但这取决于你的工作通常需要多长时间。

这是解决挂起Sidekiq作业的唯一方法,无需每小时手动检查一次,并自行重启。