【发布时间】:2016-05-26 17:06:32
【问题描述】:
我的一个视图中有一个高图表图形,并且有一个选项可以选择要查询和显示在图形中的一系列日期。我的想法是,当我执行具有大日期范围(例如年份范围)的查询时,内存会增加并且它永远不会回到正常状态,最后我需要重置服务器...... 视图调用一个执行查询并返回数据数组以创建图形的类方法。最初的方法是这样的:
data = []
messages.each do |message|
record = []
record << message.occurance_time.to_s(:highcharts_format)
record << weight_according_to_metric(message.weight, us_metric_enabled)
record << temperature_according_to_metric(message.temperature, us_metric_enabled)
record << (message.humidity.nil? ? nil : message.humidity.to_f)
data << record
end
但经过一些测试后,我将 find_each 而不是 .each 并将循环包装在 ActiveRecord::Base.uncached 语句中:
data = []
ActiveRecord::Base.uncached do
messages.find_each do |message|
record = []
record << message.occurance_time.to_s(:highcharts_format)
record << weight_according_to_metric(message.weight, us_metric_enabled)
record << temperature_according_to_metric(message.temperature, us_metric_enabled)
record << (message.humidity.nil? ? nil : message.humidity.to_f)
data << record
end
end
但我仍然有记忆问题。很明显,在执行查询时内存上升,但为什么在查询和创建图形后内存没有下降?
它在 Heroku 上与 puma 一起运行!
有什么想法吗?
【问题讨论】:
-
我认为这个问题与 ActiveRecord 的缓存无关,我相信它可能与您正在使用的 gem 有关。上面声明中的未缓存块不会给你买任何东西恕我直言
-
无论如何,无论有没有未缓存的块,我的内存在图形创建后总是保持高位......
-
你在什么环境下运行这个?
-
它在 Puma 上运行并且在 Heroku 上!
标签: ruby-on-rails ruby activerecord highcharts memory-leaks