我在heroku上部署了一个rails应用程序。我们有一个worker (job:work),它串行地创建七个管理器对象(每个任务一个),并在无限循环中对它们运行方法。下面是主代码的样子(不管怎么说,这是它的基本部分):
loop do
begin
Manager.subclasses.each do |manager_klass|
manager_klass.new.process
end
#exception handling here
end
sleep(1)
end这些任务都不会做类似Model.all之类的事情。我读过很多关于ruby中的泄漏和膨胀的文章,并且避免了其中的大多数。
我的worker的Heroku日志包括: R14 -超出内存配额;
这在工作进程运行大约3个小时后开始出现(这是内存泄漏/内存积累的充分证据)。
我已经尝试过memprof (不适用于ruby1.9),bleak_house (鞋子无关信息)和其他使用linux命令来记录内存快照的gem(不适用于heroku)。
我已经看了stackoverflow上关于这个的所有答案,没有帮助。
对于我的七个经理在一个工作中工作的具体情况,有什么想法吗?
发布于 2013-07-16 02:11:03
尝试这个命令来查看您的内存使用情况:https://devcenter.heroku.com/articles/log-runtime-metrics。也可以一起看这个https://blog.heroku.com/archives/2013/3/19/log2viz,它们应该会给你内存泄漏的确认。
不同版本的Ruby会有帮助吗?
还有:可以这么说,为什么要创建“子工作者”?你的员工没有被充分利用吗?你真的需要像这样同时处理7个工作(而不是有更多的工人)吗?
https://stackoverflow.com/questions/17654459
复制相似问题