我在Heroku雪松Rails的3.2.8应用程序运行在Ruby 1.9.3。 应用程序时,它启动,但一天后左右的连续使用,我开始看到我的日志R14的错误运行正常。 一旦内存错误开始,他们永远不会消失,即使该应用程序是闲置了好几个小时。
不应该将垃圾收集清理无用的对象了一段时间后,降低了内存负荷? 看来这是不会发生在Heroku。 一般情况下,内存使用量开始运行几千上万行数据的一些报道后爬起来,虽然结果是分页。
我如何才能找到内存泄漏? 像bleak_house插件是方式过时的或不中Heroku的环境中很好地运行。 我可以调整GC的设置,使之更具侵略性?
该GC应该做的清理,而且很可能不会。
您可以强制与GC GC.start
; 如果许多对象中未收集此意愿,但我怀疑是不是这个问题。
是否有可能你会莫名其妙地创建一批对象,从来没有释放出来,通过保持缓存副本什么的?
我不熟悉现有的工具来检查,但你可能要检查使用该对象是否存在ObjectSpace
。 例如:
ObjectSpace.each_object.with_object(Hash.new(0)){|obj, h| h[obj.class] +=1 }
# => a Hash with the number of objects by class
如果您为您的类中的一个意外的数字,例如,你会在哪里寻找一个更好的主意。
安装New Relic的插件。 它有一堆,你可以用它来找出泄漏源有用的指标。 我认为它通常一个更好的主意来试试,看看哪部分代码花费的时间最长,执行,也许尝试以优化,而不是直接调整的GC。
一些不错的功能,新的文物包括是能够找出运行时间最长的SQL查询的来源,例如。 我鼓励你去试一试。