Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/cassandra/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails Ruby/Rails内存使用率_Ruby On Rails_Ruby_Memory Management - Fatal编程技术网

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设置。