我如何才能找到在Heroku内存泄漏?(How can I find a memory leak o

2019-08-02 13:17发布

我在Heroku雪松Rails的3.2.8应用程序运行在Ruby 1.9.3。 应用程序时,它启动,但一天后左右的连续使用,我开始看到我的日志R14的错误运行正常。 一旦内存错误开始,他们永远不会消失,即使该应用程序是闲置了好几个小时。

不应该将垃圾收集清理无用的对象了一段时间后,降低了内存负荷? 看来这是不会发生在Heroku。 一般情况下,内存使用量开始运行几千上万行数据的一些报道后爬起来,虽然结果是分页。

我如何才能找到内存泄漏? 像bleak_house插件是方式过时的或不中Heroku的环境中很好地运行。 我可以调整GC的设置,使之更具侵略性?

Answer 1:

该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

如果您为您的类中的一个意外的数字,例如,你会在哪里寻找一个更好的主意。



Answer 2:

安装New Relic的插件。 它有一堆,你可以用它来找出泄漏源有用的指标。 我认为它通常一个更好的主意来试试,看看哪部分代码花费的时间最长,执行,也许尝试以优化,而不是直接调整的GC。

一些不错的功能,新的文物包括是能够找出运行时间最长的SQL查询的来源,例如。 我鼓励你去试一试。



文章来源: How can I find a memory leak on Heroku?