2014-11-24 66 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

相关问题