offset = 0
index = 1
User.establish_connection(..) # db1
class Member < ActiveRecord::Base
self.table_name = 'users'
end
Member.establish_connection(..) #db2
while true
users = User.limit(10000).offset(offset).as_json ## for a Database 1
offset = limit * index
index += 1
users.each do |u|
member = Member.find_by(name: u[:name])
if member.nil?
Member.create(u)
elsif member.updated_at < u[:updated_at]
member.update_attributes(u)
end
end
break if break_condition
end
我看到的是 RSS 内存(htop)不断增长,最终达到了 10GB。我不确定为什么会这样,但 Ruby 似乎从未释放内存给操作系统。
我知道有一长串问题与此相关。我甚至尝试将代码更改为这样(特别是最后三行)。即手动运行
GC.start
,结果仍然相同。while true
....
...
...
users = nil
GC.start
break if break_condition
end
我在 Ruby 版本 2.2.2
和 2.3.0
上测试过。
编辑:其他细节
1)操作系统。
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=15.04
DISTRIB_CODENAME=vivid
DISTRIB_DESCRIPTION="Ubuntu 15.04"
2) 安装并编译了ruby,使用rvm工具。
3) ActiveRecord版本为4.2.6
while
吗? - matt