我有一个Rails应用程序,可以处理mysql数据库中的大量记录.一旦它开始工作,它的内存使用就会以每秒50MB的速度快速增长.使用oink等工具,我能够将根本原因缩小到一个循环,该循环遍历数据库中一个大表中的所有记录.
如果我使用Person之类的东西,我就能理解.全部的每个,所有记录都将加载到内存中.然而,如果我切换到查找每个,我仍然会看到相同的内存问题.为了进一步隔离问题,我创建了下面的测试控制器,它只在记录中循环.我想find_each每次只在内存中保留少量对象,但内存使用随着执行而线性增长.
class TestController < ApplicationController
def memory_test
Person.find_each do |person|
end
end
我怀疑这与ActiveRecord缓存查询结果有关.但我判断了我的环境设置,在开发中,我确实将所有与缓存相关的选项设置为false(我使用的是rails创建的默认设置).我在网上做了一些搜索,但找不到解决方案.
我使用的是rails 3.1.0 rc1和ruby 1.9.2
谢谢