Rails使用带有大量数据的highChart进行内存泄漏

时间:2016-05-26 17:06:33

标签: ruby-on-rails ruby activerecord highcharts memory-leaks

我在我的一个视图中有一个高图图形,并且可以选择一系列日期来查询和显示在图形中。我认为当我执行具有较大日期范围(例如年份范围)的查询时,内存会上升并且它永远不会恢复到正常状态,最后我需要重置服务器... 视图调用一个类方法,该方法执行查询并返回数据数组以创建图形。最初的方法是:

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上与美洲狮一起运行!

有什么想法吗?

1 个答案:

答案 0 :(得分:1)

有几个与美洲狮和红宝石2.1和2.2相关的内存泄漏报告。红宝石垃圾收集器在2.0到2.2之间经历了相当多的变化:2.1中的分代GC,2.2中的增量GC。

泄漏报道:

https://github.com/puma/puma/issues/342

https://github.com/puma/puma/issues/978

我注意到从Ruby 2.0升级到2.2后出现的类似问题。经过几个毫无结果的研究和测试后,我终于转向最新的稳定Ruby [2.3.1],Rails [4.2.6]和puma [3.4.0]版本。泄漏消失了。