- 在sidekiq工作程序中加载多个
Models
是否会导致内存泄漏?它会收集垃圾吗
例如:
class Worker
include Sidekiq::Worker
def perform
Model.find_each do |item|
end
end
end
- 在员工内部使用
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:),但不是因为工人!