2012-02-13 7 views
0

私たちは私たちのアプリでバックグラウンド処理を処理するためにdelayed_jobしています。神はより多くのメモリを消費するDJの労働者を監視し、それを切り捨てます。レールアプリケーションでdjとgodメモリリーク

この設定は、毎日の展開で何ヶ月も完璧に動作しています。今日では、突然、一度起動したすべてのワーカーはそれぞれ400MB以上のメモリを消費します。ここ数日は配備がありませんでした。

何が間違っていた可能性がありますか?助けてください。このアプリはRuby 1.9.2とRails 3.0.5で動作しています。

答えて

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. これは理想的ですが、これはバンドラーがロードされる前にこの宝石を欲しがっているように思われます(バンドラーが新しいバージョンをロードするときしかし、もちろんバンドラーがシステムに宝石のインストールしか見ることができないときには、私は "普通の"宝石としてのサイコロをインストールし、gemfileでそれを指定することになりました。誰もが悪いバージョンの心理を読み込まないようにしています。私はこれを使って私の冒険についてもう少し詳しく書きましたblog
+0

私は不思議に思っていますが、これはどうやってDJの労働者に突然起こりますか? – Anand

+0

一度作業を開始した作業者は、作業を行う前に70MBから500MBになります。ルビー/レールのバージョンは更新しません – Anand

+0

最近dj 3.0にアップグレードしましたか? YAMLのバックエンドが選ばれたことに影響を与えることができるものがたくさんあります。バックエンドがどのように使用されているかを見るのは簡単です。私の回答 –

1

Prawnを使用してPDFでレンダリングされた透明なPNGは、この膨大なメモリ消費を引き起こしました。労働者たちはPDFを作成していました。

関連する問題