我在我的一個視圖中有一個高圖形和一個選項來選擇一個日期範圍來查詢和顯示在圖形中。這個想法是當我執行一個日期範圍很大的查詢時(例如一年範圍),內存增加,它永遠不會回到正常狀態,最後我需要重置服務器... 視圖調用一個類方法執行查詢並返回數據數組以創建圖形。該方法最初是這樣的: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而不是。每和我包裹的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的緩存相關,我相信它可能與您正在使用的寶石有關。上面聲明中的未緩存塊不會給你買任何東西IMHO –
無論如何,有或沒有未緩存的塊,我的內存在圖形創建後總是保持高位... – matiasdim
你在什麼環境中運行它? – slocumro