我在heroku上部署了一个rails应用程序。我们有一个工作者(作业:工作),它连续创建七个管理器对象(每个任务一个),并在无限循环中运行它们的方法。这就是主要代码的样子(无论如何都是它的基本部分):
loop do
begin
Manager.subclasses.each do |manager_klass|
manager_klass.new.process
end
#exception handling here
end
sleep(1)
end
没有任何任务像Model.all那样做。我读过许多关于红宝石泄漏和膨胀的文章,并且避免了大部分内容。
我的工作人员的Heroku日志包括: R14 - 超出内存配额;
这在工作人员运行大约3小时后开始显示(这是内存泄漏/内存堆积的实质证明)。
我尝试过memprof(不适用于ruby 1.9),bleak_house(鞋子无关信息)和其他使用linux命令记录内存快照的宝石(不能用于heroku)。
我已经查看了有关此问题的stackoverflow上的所有答案,没有任何帮助。
关于我在七个经理中工作的具体案例的任何想法?
答案 0 :(得分:0)
尝试使用此功能查看内存使用情况:https://devcenter.heroku.com/articles/log-runtime-metrics。另请参阅此https://blog.heroku.com/archives/2013/3/19/log2viz他们应该一起确认您的内存泄漏。
不同版本的Ruby会有帮助吗?
另外:为什么要创建“分工”,可以这么说?你的工人不是被充分利用了吗?你真的需要同时处理7个工作(而不是有更多的工人)。