我现在已经使用了sidekiq一段时间了,它运行得很完美(处理了多达500万个工作)。然而,在过去的几天里,工人们陷入困境,因此工作没有得到处理。只有重新启动工人,他们才会开始工作并再次消耗工作,但他们最终会再次停留(约10-30分钟,我没有做过任何确切的测量)。
这是我的设置:
Symptons:
如果工作人员刚刚重新启动,他们会快速处理工作(~1s)。
处理好几个工作后,完成一项工作所需的时间(以前只完成约1s的工作)突然飙升至~2900s,这使工人看起来像卡住了。
< / LI>减速会影响任何类型的工作(没有特定的违规工作)。
CPU使用率和内存消耗是正常的,也没有交换。
这是TTIN log。似乎这个过程在以下情况下挂起:
但我不确定为什么会这样。任何人都有类似的经历或对此问题有所了解?提前谢谢。
修改
以下是相关的mysql show processlist log。
我在两台不同的机器上运行Sidekiq:
关注20.7.4.5,有10个连接,所有连接都在休眠。如果我理解正确:
这里没有长时间运行的查询,因为所有连接当前都在休眠(空闲,等待终止,默认超时持续时间为8小时),这是正确的吗?
编辑2:
事实证明这个问题与我们的数据库配置有关。我们正在使用此架构:
Sidekiq workers => Load balancer => DB clusters.
通过这种设置,sidekiq工作人员会在一段时间后开始挂起(完成工作的速度要慢很多,最多可达3000秒,而通常只需要1秒)。
但是,如果我们将工作人员设置为直接与数据库集群通信,那么它可以完美运行。所以我们的设置可能有些问题,这不是一个侧面问题。
感谢所有帮助人员。