内存使用量随着Ruby 2.1与Ruby 2.0或1.9的增加而增加
我最近将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和存储问题得到解决,仍然超出了限制。
后来的后来,我尝试升级到2.1.5红宝石,但设置环境变量RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR
0.9。正如你所看到的,内存使用率比原来的2.1.5图稍好,但仍然违反了内存配额。
这是一个已知的问题与红宝石(版本的2.1.x)和垃圾收集。阅读夫妇的论坛/博客文章后,有似乎没有真正的解决办法,但执行以下操作之一:
- 降级红宝石2.0和等待红宝石2.2发布
- 使用unicorn worker killer重启麒麟工人一旦达到一定量的内存,防止Heroku的R14错误
- 一些建议调整您的GC变量(见here和here)
下面是相关discussion on ruby-lang的链接。
有些人也注意到问题的一个来源可能是NewRelic的宝石,所以你可能想更新/删除它,看看它是否有帮助。
学分一些链接和信息,以人从upcase.com论坛
因此,答案显然是升级到Ruby 2.2版本。
令人印象深刻的是,在升级到2.2之后,内存使用情况实际上已经下降,而升级到2.1则是内存消耗的巨大增加。看下面的图表。
论2.0最左边存储器消耗坐在围绕386mb下负载时,而用2.2现在坐在围绕365mb。
我在Ruby 2.2中也看到了内存消耗方面的改进。您应该将答案标记为正确。 – kartikluke 2015-02-16 13:14:36
使用Rails 3.2时Ruby 2.2是否稳定? – Kelseydh 2015-05-27 04:48:34
很有意思。我原以为[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
也一直遵循2.2版本,但我担心他们的重点主要集中在性能改进上,而不是内存消耗方面的改进,所以我怀疑它没有多大帮助。 – 2014-11-24 15:57:15
由于2.0.0-preview1中的更新GC,一些早期测试人员报告了更低的内存占用量。你可能想看看它。 – Lenart 2014-12-01 13:09:53