Ruby on rails Ruby/Rails内存使用率
嘿,伙计们,在下面的代码中:Ruby on rails Ruby/Rails内存使用率,ruby-on-rails,ruby,memory-management,Ruby On Rails,Ruby,Memory Management,嘿,伙计们,在下面的代码中: def process(batch_size=1000) claim_numbers.each_slice(batch_size) do |numbers_batch| claims = Claim.find(:all, :conditions => ["claim_number in (?)", numbers_batch]) # do something with claims end end 在
def process(batch_size=1000)
claim_numbers.each_slice(batch_size) do |numbers_batch|
claims = Claim.find(:all, :conditions => ["claim_number in (?)", numbers_batch])
# do something with claims
end
end
在我的一个Rails模型中,我正在处理大量的索赔编号
,我正在模拟一个批量查找
方法,以便不将大量记录加载到内存中,那么我的问题是:就内存而言,索赔
变量在每次迭代中会发生什么?Ruby的GC何时释放这部分内存
任何帮助和提示将不胜感激,提前感谢
更新:使用Ruby 1.8.7-p72只要GC运行,Ruby就会释放内存。由于声明的范围在每个_切片块内,因此声明在块外没有引用,并且当声明重新分配时(由于下一次迭代),先前分配的对象将变为未引用。 在GC启动之前,每个对象的内存都会被保留。可以使用一些环境变量指定GC运行的频率(更多信息,请参阅) 如果出于某种原因保留对象(因为仍然存在对它的引用,例如,将对象放入数组或散列),则不会释放该对象的内存。
如果你监控你的应用程序,你可以看到内存使用率增加,但CPU使用率也在增加,因为ruby的GC是非世代的,这意味着它每次都会检查所有对象,看看它们是否可以被收集。谢谢!我得看看那篇博文!您使用什么技术/工具来监控您的应用程序?不久前我们已经切换到JRuby,现在我们可以使用一些不错的Java监控工具(如JConsole和VisualGC)。迁移到JRuby还允许我们以更好的方式调整GC设置。