2010-06-28 36 views
5

我在使用我的Ruby on Rails应用程序(v2.3.8)时使用collectiveidea's delayed_job,并在8GB RAM Slicehost机器上运行约40个后台作业(Ubuntu 10.04 LTS,Apache 2)。延迟作业泄漏内存?

比方说,我ssh到我的服务器没有工人运行。当我做free -m时,我看到我通常使用大约1GB的RAM。然后,在启动工作人员并等待大约一分钟时间以供代码使用它们后,我达到了大约4GB。如果我在一两个小时内回来,我会在8GB和交换内存,我的网站将产生502错误。

到目前为止,我刚刚杀死工人并重新启动他们,但我宁愿修复问题的根源。有什么想法吗?这是内存泄漏吗?或者,如朋友所说,我是否需要找出运行垃圾收集的方法?

+0

这听起来像一个内存泄漏问题,但它可以在您的代码中由deleayed_job运行,它不得处于delayed_job中。一些代码审查可能会有所帮助。 – jigfox 2010-06-28 16:56:39

+0

也记住,1.9和1.8永远不会将内存送回操作系统。 – tliff 2010-06-28 17:37:01

回答

-3

几乎每次有人问到这个问题,问题都出现在他们的代码中。尝试使用其中一个可用的分析工具来查找您的工作泄漏的位置。 (https://github.com/wycats/ruby-prof或类似的。)

在每个作业结束时触发GC将以降低吞吐量为代价来降低最大内存使用量。它不会阻止Ruby膨胀到任何单个作业所需的最大大小,但是,因为Ruby无法将内存释放回操作系统。我不建议采取这种方法。