Sidekiq工人突然放慢速度(几乎像被困工人一样)

时间:2016-03-31 10:58:39

标签: ruby-on-rails sidekiq

我现在已经使用了sidekiq一段时间了,它运行得很完美(处理了多达500万个工作)。然而,在过去的几天里,工人们陷入困境,因此工作没有得到处理。只有重新启动工人,他们才会开始工作并再次消耗工作,但他们最终会再次停留(约10-30分钟,我没有做过任何确切的测量)。

这是我的设置:

  • Rails v4.2.5.1,带有ActiveJob。
  • MySQL DB,群集(有3个主人)
  • ActiveRecord :: Base.connection_pool设置为32(在Sidekiq进程中验证)。
  • 2名sidekiq工人,每名工人3个帖子(共6名)。

Symptons:

  • 如果工作人员刚刚重新启动,他们会快速处理工作(~1s)。

  • 处理好几个工作后,完成一项工作所需的时间(以前只完成约1s的工作)突然飙升至~2900s,这使工人看起来像卡住了。

    < / LI>
  • 减速会影响任何类型的工作(没有特定的违规工作)。

  • CPU使用率和内存消耗是正常的,也没有交换。

这是TTIN log。似乎这个过程在以下情况下挂起:

  • retrieve_connection
  • clear_active_connections

但我不确定为什么会这样。任何人都有类似的经历或对此问题有所了解?提前谢谢。

修改

以下是相关的mysql show processlist log

我在两台不同的机器上运行Sidekiq:

  • 20.7.4.5
  • 20.7.4.6

关注20.7.4.5,有10个连接,所有连接都在休眠。如果我理解正确:

  • 1是乘客连接
  • 3是目前“忙碌”(卡住)的sidekiq工人。
  • 6是未关闭的连接。

这里没有长时间运行的查询,因为所有连接当前都在休眠(空闲,等待终止,默认超时持续时间为8小时),这是正确的吗?

编辑2:

事实证明这个问题与我们的数据库配置有关。我们正在使用此架构:

Sidekiq workers => Load balancer => DB clusters.

通过这种设置,sidekiq工作人员会在一段时间后开始挂起(完成工作的速度要慢很多,最多可达3000秒,而通常只需要1秒)。

但是,如果我们将工作人员设置为直接与数据库集群通信,那么它可以完美运行。所以我们的设置可能有些问题,这不是一个侧面问题。

感谢所有帮助人员。

0 个答案:

没有答案