我有一个Rails 3.2.8应用程序运行在Heroku雪松与Ruby 1.9.3.该应用程序运行正常,当它启动,但一天左右的连续使用后,我开始看到我的日志上的R14错误.一旦内存错误开始,即使应用程序空闲了几个小时,它们也不会消失.
垃圾收集器应该在一段时间后清理未使用的对象,减少内存负载?似乎这在Heroku没有发生.通常,尽管结果是分页的,但是在运行了几千行数据的一些报告之后,内存使用开始上升.
如何找到内存泄漏?像bleak_house这样的插件已经过时了,不能在Heroku环境中运行得很好.可以调整GC设置,使其更具侵略性吗?
解决方法
GC应该清理干净,也许可以做.
您可以使用GC.start强制GC.如果许多物品没有被收集,这将会,但我怀疑这不是问题.
有可能你以某种方式创建一堆对象,而不是通过保存缓存的副本或某些东西来释放它们?
我不熟悉现有的检查工具,但您可能希望使用ObjectSpace检查哪些对象存在.例如:
ObjectSpace.each_object.with_object(Hash.new(0)){|obj,h| h[obj.class] +=1 } # => a Hash with the number of objects by class
例如,如果您为某个课程获得了意外的数字,那么您将更好地了解在哪里寻找.