2016-05-26 2 views
2

Я hava highchart graphic в одном из моих представлений и возможность выбрать диапазон дат для запроса и показать на графике. Думаю, когда я выполняю запрос с большим диапазоном дат (например, диапазон года), память поднимается и никогда не возвращается в нормальное состояние, и, наконец, мне нужно перезагрузить сервер ... Вид вызывает класс метод, который выполняет запрос и возвращает массив данных для создания графика. Метод изначально был такой:Rails Утечка памяти с использованием highChart с большим количеством данных

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 

Но у меня все еще проблемы с памятью. Очевидно, что во время выполнения запросов память растет, но почему память не падает после создания запроса и графики?

Он работает с puma на Heroku!

Любые мысли?

+0

Я не верю, что проблема связана с кешированием ActiveRecord, я считаю, что это может быть связано с драгоценными камнями, которые вы используете. В неактивном блоке в вашем заявлении выше вы ничего не купите. IMHO –

+0

Во всяком случае, с незакрытым блоком или без него моя память всегда сохраняется высокой после создания графики ... – matiasdim

+0

В какой среде вы работаете? – slocumro

ответ

1

Имелось несколько сообщений об утечках памяти, связанных с пумой и рубинами 2.1 и 2.2. Сборщик рубинового мусора испытал немало изменений с 2.0 до 2.2: Генерация GC в 2.1, Инкрементальный GC в 2.2.

Утечка сообщила:

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]. Утечка исчезла.

Смежные вопросы