2014-11-24 19 views
16

Yakın zaman önce 2.0 sürümünden 2.0.5 sürümüne bir Ruby yükseltmesini Heroku web uygulamasına yükledim ve şu anda sürekli olarak bellek kotası hataları gönderiyorum, oysa 2.0 ve 1.9 ile bu hiç bir zaman olmuş. Normal bir Heroku Dyno için 512MB'lık bir limit var ve iki Dynos'taki Sidekiq ile bir thread ile birlikte Unicorn ile 2 işlem yürütüyorum.Ruby 2.1 ya da Ruby 2.0 ya da 1.9 ile uyumlu bellek kullanımı

Phusion Passenger memory consumption increase from 1.9.3 (system) to 2.1.2 (RVM) on Ubuntu okunduktan sonra, nesil çöp toplayıcısını devre dışı bırakmak için RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR çevre değişkeni ayarlamayı denedim ve bellek tüketimini biraz iyileştirdi, ancak yine de 2,0 veya 1,9 tükendiğim yerlerin yakınında kalmamı sağladı. Şu anda bellek benim birincil endişe olduğu gibi, 2.0 için geri dönmek yerine ruby ​​2.1.x ile bu sorunu tamir edebilir eğer görmek istiyorum. İşte

sorunu gösteren bazı grafikler şunlardır: hemen önce 2 De

, ben Ruby 2.1.5 Ruby 2.0.0-p598 döndürüldüğünü ve hafıza sorunları giderilmiş ve sınırının altında kalmıştır. moving from 2.1.5 to 2.0.0 Heroku moving from 2.1.5 to 2.0.0 New Relic

Sonra sonra, Ruby 2.1.5 yükseltme ancak 0.9 değişken RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR ortamını ayarlama çalıştı. Gördüğünüz gibi, bellek kullanımı orijinal 2.1.5 grafiğinden biraz daha iyi, ancak yine de bellek kotasını ihlal ediyor.

moving from 2.0.0 to 2.1.5 with <code>RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR</code> to 0.9 Heroku moving from 2.0.0 to 2.1.5 with <code>RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR</code> to 0.9 New Relic

+0

çok ilginç. Bunu düşünürdüm [https://www.omniref.com/blog/blog/2014/11/18/ko1-at-rubyconf-2014-massive-garbage-collection-speedup-in-ruby-2- dot-2 /) ilgili ama cevabın burada ne olduğunu görmek merak ediyordu. – Anthony

+0

2.2 sürümünü de takip ettim, ancak onların odaklanmalarının büyük ölçüde bellek tüketimindeki gelişmelerden ziyade performans geliştirmelerinden kaynaklandığından endişeleniyorum, bu yüzden çok fazla yardım etmeyeceğinden şüpheleniyorum. –

+0

Bazı erken test kullanıcıları, 2.0.0 önizlemesinde1 güncellenmiş GC nedeniyle daha düşük bellek ayak izi bildirdiler1. Kontrol etmek isteyebilirsiniz. – Lenart

cevap

4

Bu Ruby (sürüm 2.1.x) ve onun çöp toplama ile ilgili bilinen bir sorundur. 2.0 yakut ve tek boynuzlu at işçileri yeniden

  • kullanımını unicorn worker killer tahliye edilecek yakut 2.2 beklemek

    • downgrade: forumlar/blog mesajların çift okuduktan sonra hiçbir gerçek çözüm gibi ama şunlardan birini yapın görünüyor onlar bellek belirli miktarda önleme Heroku R14 hataları
    • ulaştığında bazı senin GC değişkenleri (here ve here bakınız)

    İşte alakalı discussion on ruby-lang için bir bağlantı verdiği düşündürmektedir.

    Bazı insanlar ayrıca problemlerin bir kaynağının NewRelic'ın geminin olabileceğini fark ettiler, böylece güncellemek/kaldırmak ve yardımcı olup olmadığını görmek isteyebilirsiniz.

  • +0

    NewRelic gem sorunları ile ilgili olarak 'aggressive_keepalive: true' yapılandırmanıza ekleyebilirsiniz. Bu newrelic gem tarafından neden olunan bellek problemlerinin çözülmesine yardımcı olacaktır. – Lenart

    +0

    Teşekkürler @Lenart, bunlar iyi öneriler. Bu sorunu yaşadığımda 2.0'a düştüm, umarım 2.2 sürümü yayınlanacak, ne okuduğuma dayanarak sorunu çözecek, tamamen ikna olamayacağına inanıyorum. Bu yayın, 2.2 sürümü yayınlanır yayınlanmaz güncellenir. –

    +0

    @ MatthewO'Riordan, 2.2 ile ilgili herhangi bir güncelleme var mı? – Ari

    12

    forumda upcase.com gelen adamlar bağlantılar ve bilgi bazı

    Kredi Yani cevap açıkça Yakut sürüm 2.2 yükseltme edilir.

    Bellek kullanımının 2.2'ye yükseltmeyi takiben aslında bellek kullanımının azaldığını, 2.1'e yükseltmenin bellek tüketiminde büyük bir artış olduğunu görmekten çok etkilendim. Aşağıdaki grafiğe bakınız. şimdi 365mb etrafında oturur 2.2 ile oysa 2.0 üzerinde en soldaki bellek tüketimi üzerinde

    Memory usage with 2.2

    , yük altında 386mb etrafında oturur.

    +0

    Ayrıca, Ruby 2.2'de bellek tüketiminde de gelişmeler görüyorum. Muhtemelen cevabı doğru olarak işaretlemelisiniz. – kartikluke

    +1

    Ruby 2.2 Rails 3.2 ile kararlı mıdır? – Kelseydh