Nud*_*oll 6 apache ubuntu memory-leaks ruby-on-rails delayed-job
我在我的Ruby on Rails应用程序(v2.3.8)中使用了collectiveidea的delayed_job,并在8GB RAM Slicehost机器(Ubuntu 10.04 LTS,Apache 2)上运行了大约40个后台作业.
假设我在没有工作人员运行的情况下进入我的服务器.当我这样做时free -m,我发现我通常使用大约1GB的RAM中的8个.然后在启动工作人员并等待大约一分钟让它们被代码使用后,我达到了大约4GB.如果我在一两个小时内回来,我将在8GB并进入交换内存,我的网站将产生502错误.
到目前为止,我刚刚杀死了工人并重新启动它们,但我宁愿解决问题的根源.有什么想法吗?这是内存泄漏吗?或者,正如朋友建议的那样,我是否需要找出运行垃圾收集的方法?
实际上,如果您的模型具有序列化属性,则Delayed :: Job 3.0会泄漏Ruby 1.9.2中的内存.(我正在研究解决方案.)
这里有人似乎解决了这个问题,http://spacevatican.org/2012/1/26/memory-leak-in-yaml-on-ruby-1-9-2
这是来自Delayed :: Job的问题https://github.com/collectiveidea/delayed_job/issues/336
bet*_*att -2
几乎每次有人问这个问题时,问题都出在他们的代码中。尝试使用一种可用的分析工具来查找您的工作存在漏洞。(https://github.com/wycats/ruby-prof或类似的。)
在每个作业结束时触发 GC 会减少最大内存使用量,但代价是会降低吞吐量。然而,它不会阻止 Ruby 膨胀到任何单个作业所需的最大大小,因为 Ruby 无法将内存释放回操作系统。我不建议采用这种方法。