2012-02-29 24 views
8

先週、Rails 3.0.1で動作していた小さなプロジェクトをRails 3.2.2にアップグレードしました。Rails 3.0からRails 3.2(Ruby 1.9.3 + Passenger)へのアップグレード後の膨大なメモリリーク/膨れ

アップグレードの直後に、私たちは時々、1日2〜3回、巨大なPhusion Passengerプロセス(1〜5 GB)を捉えていることを認識しました。

Phusion Passenger 3.0.11とRuby 1.9.3-p0が動作しています。すでにRubyのバージョン(1.9.2-p290と1.9.3-p125)は成功していませんでした。

その後、我々のメモリ使用量をOinkで追跡しようとしました。残念ながら、Oinkはメモリが肥大化する理由を示していません - 大きなプロセスはもはやログファイルに書き込まれないようです。

私たちがRails 3.0.1にダウングレードしたとき、問題はなくなりました。誰にも同様の問題がありますか?あまりにも多くのActiveRecordインスタンスなど、メモリリークの可能性をコードで確認しましたが、何も見つからなかった。

Passengerの代わりにUnicornを試してみる価値はあると思いますか?それとも、同じ問題に遭遇する可能性はありますか?

メモリリークをトレースする方法についてのご意見は歓迎します。すでにnewrelicを設定していますが、メモリリークに関する詳細情報は表示されません。

+1

PassengerをUnicornセットアップで置き換えたので、システムは期待どおりに動作します。私はそれが一般的な旅客の問題か、おそらくPassenger/rvm(そしておそらく私たちが最近どのようにそれをインストール/アップグレードしたか)に関する問題ではありません。 –

+0

ユニコーンの設定を共有してもよろしいですか?私はまったく同じ問題を抱えており、メモリオーバーフローを防ぐために6時間ごとにサーバーを再起動する必要があります。 –

+2

遅れて申し訳ありません。まあ...ユニコーンの設定を共有するのはおそらくあまりにも多くのコメントをここに投稿するだろう。すばらしいGoogle検索が役立ちます。 https://github.com/blog/517-unicornから始めてください。基本的には、アップストリームサーバとしてのユニコードのnginxです。ユニコーンの設定は単なるunicorn.rbで設定されています....乗客から切り替えるのにおそらく1時間かかりました。また、カイストラーノの設定にユニコーンのデプロイメントを追加する方法もあります。 –

答えて

0

PassengerMaxPoolSize PassengerPoolIdleTimeとその他の乗客の設定で、乗客の記憶統計が示すものと、乗客が設定したメモリの種類を知りたいと思います。

どのように乗客をアップグレードしましたか?

あなたのApacheの設定はどのようなものですか?プリフォークや労働者?

私は乗客が使用するルビーのラッパーでこれを置くことによってチューニング彼らにしようと、あなたが悪いのGCパフォーマンスを見ていると思われる:

#!/bin/sh 
export RUBY_HEAP_MIN_SLOTS=600000 
export RUBY_GC_MALLOC_LIMIT=59000000 
export RUBY_FREE_MIN=200000 
exec "/usr/bin/ruby" "[email protected]" 

それはあなたが一般的な原因で見ているいくつかのパフォーマンスの問題を修正する必要があります貧弱なruby gcのデフォルトへ。

+0

この問題が発生して以来、しばらくしています。残念ながら、私はもうPassengerの設定を知らないのですが、デフォルトまたは推奨値だったと思います。 nginxもインストールされているデフォルトのインストールスクリプトでPassengerをインストールしました。 私がすでに上記のコメントに書いたように、Passenger/NginxではなくUnicorn/nginxを使用して問題を解決しました。 –

1

Red Hat互換のLinuxの場合は、SystemTapを使用できます。私はSystemTapがDebian/Ubuntuシステムで利用できるかどうか分かりません。そうでなければDTraceという代替手段があります。ここにいくつかの記事があります - 私はいくつかの回帰を追跡することでかなり成功していますが、これらのどれもメモリの問題ではありませんでした(おそらくあなたのためのトリックを行うことができるSTPスクリプトを見つけることができます)。ここで読む:

http://lukas.zapletalovi.com/2012/02/peek-into-your-ruby-app-with-systemtap.html http://lukas.zapletalovi.com/2012/01/probing-ruby-apps-with-systemtap-in.html http://sourceware.org/systemtap/wiki/RubyMarker

最後のリンクは、あなたがRubyでSystemTapsににフープできるプローブを示しています。 gcの実行やメモリ割り当てのような考えがあり、あなたを助けることができます。がんばろう!

関連する問題