我正在使用sidekiq gem来处理Rails中的后台作业。出于某种原因,工作只是暂停了一段时间 - 这个过程要么变得没有反应,出现在top
但没有多少,或者神秘地消失,没有错误(没有报告给airbrake.io)。
有没有人有这方面的经验?
答案 0 :(得分:7)
使用TTIN信号获取流程中所有线程的回溯,这样您就可以找出工人被卡住的位置。
答案 1 :(得分:1)
我经历过这种情况,并没有找到解决方案/根本原因。
我无法彻底解决这个问题,但想出了一个黑客。
我将God配置为监视我的Sidekiq进程,并在文件更改时重新启动它们。
然后我设置了一个每5分钟运行一次的Cron作业,该作业检查了当前所有Sidekiq工作人员的队列。如果某些百分比的工人过去的开始时间<= 5分钟,则意味着那些工人因某种原因而挂起。如果发生这种情况,我触摸了一个文件,让上帝重启Sidekiq。对我来说,5分钟是理想的,但这取决于你的工作通常需要多长时间。
这是解决挂起Sidekiq作业的唯一方法,无需每小时手动检查一次,并自行重启。