我有一个在 Heroku 上运行的 Rails 应用程序(每天大约 1 000 次页面浏览量)。自上周发布以来,我一直在经历应用程序频繁崩溃。
研究 New Relic,Dynos 的内存使用量似乎在不断增加,而内存使用量却从未下降。基本上,它会在几个小时内建立起来,然后以请求超时结束,这似乎很可能。
因此,我认为应用程序崩溃的问题是由于内存泄漏造成的。
我的应用程序(presenttips .com)是一个礼品网站,其中我有“随机礼物”、“每日礼物”和“横幅”等功能。这些我像这样加载到应用程序控制器中:
before_filter :global_setup
def global_setup
# Create random gift
rand_gift = []
rand_gift << Gift.where(:gift_status_id => 1) #=> Accepted
@random_gift = rand_gift[0][rand(rand_gift[0].size) - 1]
rand_gift = nil
@nbr_of_active_gifts = (Gift.where(:gift_status_id => 1).count / 100 ).round * 100
@toplist = Gift.where(:gift_status_id => 1).order("week_click DESC").limit(20)
@banners = Banner.where("first_date <= '" + Time.now.to_date.to_s + "'").where("last_date >= '" + Time.now.to_date.to_s + "'").order("first_date ASC")
advertise_here = []
(@banners.count..4).each do |i|
advertise_here[i] = Banner.new(:advertiser => "Presenttips.com", :banner_image => "annons.jpg", :url => advertise_path)
end
@banners << advertise_here.compact
@banners = @banners.flatten
@page_categories = PageCategory.order(:prio_rank)
if Rails.env.production?
@random_sql = "RANDOM()"
@meta_robots_block = false
@analytics_block = false
else
@meta_robots_block = true
@analytics_block = true
@random_sql = "RAND()"
end
gift_from_daily = DailyGift.where(:publish_date => Time.now.to_date).first
gift_from_daily = DailyGift.create(:publish_date => Time.now.to_date, :gift_id => @random_gift.id) if gift_from_daily.blank?
@daily_gift = Gift.find(gift_from_daily.gift_id)
@head_categories = Category.order(:name).where(:parent_id => nil)
todays_date = Time.now.to_date.to_s
@season = Season.where("'" + todays_date + "' >= date_start ", "'" + todays_date + "' <= date_end" ).first
@season_theme = @season.css
@logo = 'logo.png'
@logo = 'seasons/logo_christmas.png' if @season.css.eql?('theme_christmas.css')
end
这样我就可以在应用程序中全局使用它们(例如,当天的礼物总是在右侧列中)。
我想这不是很好考虑到内存使用情况。
我的问题:
- 这可能会导致内存堆积吗?
- 在这种情况下,有什么更聪明的方法来做到这一点?