sidekiq工作程序内部的内存消耗


  1. 在sidekiq工作程序中加载多个Models是否会导致内存泄漏?它会收集垃圾吗

例如:

class Worker
  include Sidekiq::Worker
  def perform
    Model.find_each do |item|
    end
  end
end
  1. 在员工内部使用ActiveRecord::Base.connection是否会导致问题?或者此连接自动关闭

我想你遇到了一个问题,我也遇到了一名"工人"——实际的问题是代码,而不是Sidekiq

在我有问题的代码中,我只是轻率地用一个大的、胖的、贪婪的查询(数十万个实例)加载了一船模型。

我很简单地修复了我的工作者/代码。在我的例子中,我将DB调用从all转换为使用find_in_batches,为该批提取的对象数量较少。

Model.find_in_batches(100) do |record| 
# ... I like find_in_batches better than find_each because you can use lower numbers for the batch size
# ... other programming stuff 

当我这么做的时候,一个会在一段时间后关闭Sidekiq的工作(盒子上的内存用完了)已经用find_in_batches运行了5个月,我甚至不需要重新启动Sidekiq。。。好吧,在过去的5个月里,当我部署或进行维护时,我可能已经重新启动了Sidekiq:),但不是因为工人!

最新更新