在Mongoid中,内存使用率随着“identity_map_enabled”的增加而不断增加

时间:2013-09-03 11:21:46

标签: ruby-on-rails mongoid

我在具有1 GB RAM的服务器上运行带有Mongoid数据库后端的Rails应用程序。 数据库本身位于不同的数据库服务器上。

每当我运行一个迭代某些集合的rake任务时,我注意到RAM使用率在 htop 中不断增加,直到服务器无响应。

只有在值:

时才会发生这种情况

identity_map_enabled: true在mongoid.yml配置文件中设置。

我正在使用 Mongoid gem 2.4.11 。 我知道它是旧版本,最近版本是4.0。

考虑到系统范围的ORM更新是不可行的,有什么方法可以修补现有代码来解决问题?

1 个答案:

答案 0 :(得分:2)

doc明确规定在rake任务等中禁用身份映射。

我创造了这个:

class MongoidUtils
  def self.without_identity_map &block
    if Mongoid.identity_map_enabled
      Mongoid.identity_map_enabled = false
      result = yield
      Mongoid.identity_map_enabled = true
      result
    else
      yield
    end
  end
end

然后以这种方式使用它:

MongoidUtils.without_identity_map do
  #your code here
end