Models
会导致内存泄漏吗?是垃圾收集了吗?例如:
class Worker
include Sidekiq::Worker
def perform
Model.find_each do |item|
end
end
end
ActiveRecord::Base.connection
会导致问题吗?或者此连接会自动关闭?答案 0 :(得分:1)
我认为你遇到了一个问题,我也遇到了“工人” - 实际的问题是代码,而不是Sidekiq的任何方式,形状或形式。
在我有问题的代码中,我毫不思考地加载了一大堆模型,这些模型具有大而肥胖的贪婪查询(数十万个实例)。
我很简单地修复了我的工作人员/代码。对于我的实例,我将我的数据库调用从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,但不是因为工人!