rake任务内存泄漏

时间:2011-09-02 01:40:19

标签: ruby-on-rails memory-leaks rake

我有一个长时间运行的rake任务,随着时间的推移吞噬我的所有系统内存?什么是追踪我的问题并深入了解它的最快方法?

我在slicehost和mysql 5上使用rails 2.3.5,ruby 1.8.7,ubuntu。

我的rails应用程序运行正常。我有一个夜间工作,整夜运行,并做了大量的工作(一些外部调用twitter,谷歌等,以及许多使用活动记录的数据库调用,随着时间的推移,工作内存大小增加到接近4 gig。我需要计算为什么rake任务没有释放记忆。

我开始研究bleak_house,但设置似乎很复杂,并且在一年多时间内没有更新。我不能让它在当地工作,所以我不愿意尝试生产。

感谢 乔尔

1 个答案:

答案 0 :(得分:1)

抛出两个想法。首先,如果你作为这项工作的一部分进行循环,请确保你没有持有对你不需要的对象的引用,因为这会阻止它们被收集。如果您已完成,请从阵列中删除它们,或者其他任何内容。另外,将一个定期的GC.start放入循环中,以查看它是否只是没有进入GC-ing。

第二个想法是ruby不是GC符号,因此如果您的API客户端将值存储为符号,您最终会得到一组永远不会被重复使用的巨大且不断增长的符号。符号很小,但微小的东西仍然可以加起来。

当然,不要加载超出需要的对象。如果必须遍历大量的AR对象,请使用#find_each批量加载AR对象。