与Ruby2.0或1.9相比,Ruby2.1的内存使用量增加是怎么回事?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (23)

我最近部署了从2.0到2.1.5的Ruby升级到我的Heroku Web应用程序,现在我一直在处理内存配额错误,而2.0和1.9这种情况从未发生过。正常的Heroku Dyno有512MB的限制,并且我正在使用Unicorn运行2个进程,以及两个dynos使用Sidekiq运行一个线程。

我尝试将环境变量设置RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR为0.9以禁用分代垃圾回收器,并且它确实提高了内存消耗,但仍然让我远不及2.0或1.9的消耗。现在内存是我最关心的问题,我想看看我是否可以用ruby 2.1.x解决这个问题,而不是回复到2.0。

下面是一些演示问题的图表:

在下午2点之前,我降级到Ruby 2.0.0-p598到Ruby 2.1.5,内存问题得到解决,并保持在极限之下。

之后,我尝试升级到Ruby 2.1.5,但将环境变量设置RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR为0.9。正如你所看到的,内存使用率比原来的2.1.5图稍好,但仍然违反了内存配额。

提问于
用户回答回答于

这是Ruby(版本2.1.x)及其垃圾收集的已知问题。阅读几个论坛/博客文章后,似乎没有真正的解决方案,最好就降级到2.0并等待2.2发布

用户回答回答于

所以答案显然是升级到Ruby 2.2版。

看到内存使用量在升级到2.2之后实际上已经下降了,而升级到2.1则是内存消耗的巨大增加,这让我印象深刻。看下面的图表。

在负载最低的情况下,2.0的内存消耗约为386mb,而2.2的情况目前约为365mb。

扫码关注云+社区