1

我在heroku 上部署了一个rails 应用程序。我们有一个工人(jobs: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​​ 中的泄漏和膨胀的文章,并且避免了其中的大部分。

我的工作人员的 Heroku 日志包括: R14 - 超出内存配额;

这在工人运行大约 3 小时后开始出现(这是内存泄漏/内存积累的充分证据)。

我已经尝试过 memprof(不适用于 ruby​​ 1.9)、bleak_house(与鞋子无关的信息)和其他使用 linux 命令记录内存快照的 gem(不适用于 heroku)。

我已经查看了有关此问题的所有关于 stackoverflow 的答案,没有任何帮助。

关于我的七名经理在同一份工作中工作的具体案例有什么想法吗?

4

1 回答 1

0

试试这个来查看你的内存使用情况:https ://devcenter.heroku.com/articles/log-runtime-metrics 。另请参阅此https://blog.heroku.com/archives/2013/3/19/log2viz 他们应该一起确认您的内存泄漏。

不同版本的 Ruby 会有帮助吗?

另外:可以这么说,您为什么要创建“子工人”?你的工人没有得到充分利用吗?你真的需要像那样同时处理 7 个工作吗(而不是有更多的工人)。

于 2013-07-15T18:11:03.097 回答