我有一个在 Heroku Cedar 上使用 Ruby 1.9.3 运行的 Rails 3.2.8 应用程序。该应用程序启动时运行良好,但连续使用一天左右后,我开始在日志中看到 R14 错误。一旦内存错误开始,即使应用程序闲置几个小时,它们也永远不会消失。
垃圾收集器是否应该在一段时间后清理未使用的对象并减少内存负载? Heroku 上似乎没有发生这种情况。一般来说,尽管结果是分页的,但在运行一些包含数千行数据的报告后,内存使用量开始逐渐增加。
我怎样才能找到内存泄漏?像 bleak_house 这样的插件已经过时了,或者在 Heroku 环境中不能很好地运行。我可以调整 GC 设置以使其更具攻击性吗?
GC 应该进行清理工作,并且可能会这样做。
你可以强制GCGC.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
例如,如果您在其中一门课程中收到意外的电话号码,您就会更好地知道该去哪里寻找。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)