0

RailsにHerokuで実行するアプリケーションがあります(1日あたり約1,000ページのビュー)。先週のリリース以来、アプリケーションのクラッシュが頻繁に発生しています。

New Relicを見ると、Dynosのメモリ使用量は、メモリ使用量が減少することなく絶えず増加しているようです。基本的に、それは数時間の間に蓄積し、その後、リクエストのタイムアウトで終了します。これは可能性が高いようです。

したがって、アプリのクラッシュの問題はメモリリークが原因であると思います。

私のアプリ(presenttips .com)は、「ランダムギフト」、「今日のギフト」、「バナー」などの機能を備えたギフトWebサイトです。これらは、次のようにアプリケーションコントローラーにロードします。

  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

アプリでグローバルに使用できるようにします(たとえば、その日のギフトは常に右側の列に表示されます)。

ただし、メモリ使用量を考慮すると、これはあまり良くないと思います。

私の質問:

  1. これはメモリの蓄積を引き起こす可能性がありますか?
  2. その場合、これを行うためのより賢い方法は何でしょうか?
4

1 に答える 1

0

私はこれらの変数のほとんどすべてを削除しましたが、それでも役に立ちませんでした。アプリケーションコントローラがメモリの問題を引き起こしていないと仮定します。

于 2012-09-25T07:15:23.297 に答える