在rails应用程序中dj和god内存泄漏

时间:2012-02-13 08:45:45

标签: ruby-on-rails ruby delayed-job

我们有delayed_job来处理我们应用中的后台处理。上帝不时地监视消耗更多记忆的DJ工作者并将其切断。

这种设置已经完美地工作了几个月,每天进行部署。现在,突然所有的工作人员一旦开始消耗400多MB内存。最近几天没有部署。

可能出了什么问题?请帮忙。该应用程序使用Rails 3.0.5在Ruby 1.9.2上运行。

2 个答案:

答案 0 :(得分:2)

当前版本的ruby 1.9.2附带了一个泄漏内存的psych(新的YAML解析器)版本。如果YAML::ENGINE.yamler为'psych'且Psych::VERSION为1.0.0,那么您使用的是受影响的版本。

有几种方法可以解决。你可以(没有特别的顺序)

  1. 不使用心理。这可能有点棘手,因为捆绑者试图加载心理。在捆绑器更改之后但在延迟作业加载之前,您需要将YAML::ENGINE.yamler重置为'syck'(因为延迟的作业有一些YAML后端特定代码,您需要它来加载正确的代码。
  2. 使用ruby 1.9.3。它附带了更新版本的psych。
  3. 安装较新版本的psych作为gem。虽然这听起来很理想,但是因为你想在捆绑器加载之前想要这个宝石(所以当捆绑器加载它时会加载新版本的心理),但是当捆绑器加载时你只看到gems安装在系统中。我最终安装了psych作为“普通”gem并在gemfile中指定它。还有一些其他的箍你可能需要跳过它们所有围绕着确保没有人加载坏版本的心理。我在blog
  4. 上写了更多关于我的冒险经历的文章

答案 1 :(得分:1)

使用Prawn在PDF中呈现的透明PNG导致了巨大的内存消耗。工人正在进行PDF生成。