我最近在我的Heroku web应用程序中部署了Ruby从2.0到2.1.5的升级,现在我总是遇到内存配额错误,而在2.0和1.9中,这种情况从未发生过。一个普通的Heroku Dyno有512MB的限制,我在Unicorn上运行两个进程,在两个dynos上运行一个Sidekiq线程。
在读取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的消耗。由于内存是我现在最关心的问题,我想看看我是否可以用Ruby2.1.x来解决这个问题,而不是恢复到2.0。
以下是演示该问题的一些图表:
在快到下午2点的时候,我把Ruby2.0.0-p598降级到了Ruby2.1.5,内存问题得到了解决,并且仍然在限制之下。
后来,我尝试升级到 2.1.5,但将环境变量 RUBY_GC_HEAP_OLDOBJECT_LIMIT_FACTOR
设置为0.9。正如您所看到的,内存使用率略好于原始的2.1.5图,但仍然超过了内存配额。
发布于 2015-01-16 21:40:24
因此,答案显然是升级到Ruby版本2.2。
令我印象深刻的是,在升级到2.2之后,内存使用量实际上已经下降了,而升级到2.1则是内存消耗的巨大增加。请参阅下面的图表。
在最左边,2.0的内存消耗在负载下约为386mb,而2.2的内存消耗现在约为365mb。
发布于 2014-11-29 02:25:38
这是Ruby (2.1.x版)及其垃圾收集的一个已知问题。在阅读了几篇论坛/博客帖子后,似乎没有真正的解决方案,只能执行以下操作之一:
这里有相关discussion on ruby-lang的链接。
一些人还注意到问题的一个来源可能是NewRelic的gem,所以你可能想要更新/删除它,看看它是否有帮助。
来自upcase.com论坛的一些链接和信息的信用
https://stackoverflow.com/questions/27102565
复制相似问题