2014-11-24 108 views
16

我最近將Ruby從2.0升級到2.1.5到我的Heroku Web應用程序,並且我現在一直在處理內存配額錯誤,而對於2.0和1.9,這絕不會發生了。正常的Heroku Dyno有512MB的限制,並且我正在使用Unicorn運行2個進程,以及兩個dynos使用Sidekiq運行一個線程。內存使用量隨着Ruby 2.1與Ruby 2.0或1.9的增加而增加

在閱讀Phusion Passenger memory consumption increase from 1.9.3 (system) to 2.1.2 (RVM) on Ubuntu後,我試着將環境變量RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR設置爲0.9來禁用世代垃圾回收器,並且它確實提高了內存消耗,但仍然讓我無法接近2.0或1.9的消耗。現在內存是我最關心的問題,我想看看我是否可以用ruby 2.1.x解決這個問題,而不是回覆到2.0。

這裏有一些圖表展示問題:

在之前下午,我降級到Ruby 2.0.0-p598到Ruby 2.1.5和存儲問題得到解決,仍然超出了限制。

moving from 2.1.5 to 2.0.0 Heroku moving from 2.1.5 to 2.0.0 New Relic

後來的後來,我嘗試升級到2.1.5紅寶石,但設置環境變量RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR 0.9。正如你所看到的,內存使用率比原來的2.1.5圖稍好,但仍然違反了內存配額。

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

很有意思。我原以爲[this](https://www.omniref.com/blog/blog/2014/11/18/ko1-at-rubyconf-2014-massive-garbage-collection-speedup-in-ruby-2-點-2 /)是相關的,但很好奇,看看答案在這裏。 – Anthony 2014-11-24 12:46:35

+0

也一直遵循2.2版本,但我擔心他們的重點主要集中在性能改進上,而不是內存消耗方面的改進,所以我懷疑它沒有多大幫助。 – 2014-11-24 15:57:15

+0

由於2.0.0-preview1中的更新GC,一些早期測試人員報告了更低的內存佔用量。你可能想看看它。 – Lenart 2014-12-01 13:09:53

回答

4

這是一個已知的問題與紅寶石(版本的2.1.x)和垃圾收集。閱讀夫婦的論壇/博客文章後,有似乎沒有真正的解決辦法,但執行以下操作之一:

  • 降級紅寶石2.0和等待紅寶石2.2發佈
  • 使用unicorn worker killer重啓麒麟工人一旦達到一定量的內存,防止Heroku的R14錯誤
  • 一些建議調整您的GC變量(見herehere

下面是相關discussion on ruby-lang的鏈接。

有些人也注意到問題的一個來源可能是NewRelic的寶石,所以你可能想更新/刪除它,看看它是否有幫助。

學分一些鏈接和信息,以人從upcase.com論壇

+0

關於NewRelic gem問題,您可以在配置中添加'aggressive_keepalive:true'。這應該有助於解決由newrelic gem引起的內存問題。 – Lenart 2014-11-28 18:26:44

+0

感謝@Lenart,這些都是很好的建議。當我遇到這個問題時,我降級到了2.0,希望2.2版本能夠解決這個問題,儘管基於我讀過的內容,我並不完全相信它會。我將在2.2發佈後立即更新這篇文章。 – 2014-12-01 17:09:55

+0

@ MatthewO'Riordan,2.2版的更新? – Ari 2014-12-26 05:39:33

12

因此,答案顯然是升級到Ruby 2.2版本。

令人印象深刻的是,在升級到2.2之後,內存使用情況實際上已經下降,而升級到2.1則是內存消耗的巨大增加。看下面的圖表。

Memory usage with 2.2

論2.0最左邊存儲器消耗坐在圍繞386mb下負載時,而用2.2現在坐在圍繞365mb。

+0

我在Ruby 2.2中也看到了內存消耗方面的改進。您應該將答案標記爲正確。 – kartikluke 2015-02-16 13:14:36

+1

使用Rails 3.2時Ruby 2.2是否穩定? – Kelseydh 2015-05-27 04:48:34

相關問題