获取OutOfMemoryError:使用ActiveRecord时的GC开销限制异常:: find_in_batces(每次记录20次)

时间:2013-05-14 20:48:22

标签: ruby-on-rails-3 activerecord jrubyonrails

我正在使用: Rails 3.0.7 jruby 1.6.7(ruby-1.8.7-p357)

并尝试以20个批次处理~360K DB记录,如下所示:

BackJobs.find_in_batches(:conditions => "progress = -1", :batch_size => 20) do |all_pending_jobs|
    all_pending_jobs.each do |job|
        pending_jobs.push(job)
    end

然而在一段时间后继续获得例外:

ActiveRecord::StatementInvalid: Java::JavaLang::OutOfMemoryError: GC overhead limit 
exceeded: SELECT  "background_jobs".* FROM "background_jobs" WHERE (progress = -1) 
AND ("background_jobs"."id" > 45256) ORDER BY "background_jobs"."id" ASC LIMIT 20

该进程使用这些JVM设置运行: -Xmx256m -Xss2048k

据我了解,在rails 3.1.0之前不支持active_record.identity_map Ruby on Rails memory leak when looping through large number of records; find_each doesn't help

但即使只使用ActiveRecord :: Unchached也无济于事。

不确定我是否应该/如何销毁ActiveRecord对象以释放内存。请指教。感谢。

0 个答案:

没有答案