2012-11-17 12 views
5

だから、このレールアプリには恐ろしいメモリリークの問題があります。私はHeroku上でそれを実行しています、そして、私は何が地球を引き起こしているのか把握しようとしていましたが、私は5時間ごとにアプリケーションを継続的に再起動しなければなりませんでした。私のアプリはクラッシュします。メモリリークin Rails App ...文字列のナイトメール

私はOinkを使用しています。私はインスタンス化されたクラスで何か怪しいものは見ていません。唯一のことは、各ページの読み込みで、使用されるメモリが這い上がることです。どのページにロードするかは関係ありませんが、それは一見ランダムです。

New Relicは、特定のコントローラーアクションと関係なく、あまり役に立ちません。

私が見つけたのは、ObjectSpaceを使用したことだけです。ObjectSpaceは、メモリ内の膨大な数の文字列オブジェクトを示していて、その数は成長して成長しています。私は文字列の値を記録するための小さなツールを使用し、それらはすべて空白です。無名ではありませんが、空白です。私の制作アプリは、定期的に200,000を超える文字列オブジェクトを使用しています。

これはおそらく何が起こっているのでしょうか?これは、私のサイトを生き生きとした状態に保つために、5時間おきに私のコンピュータにいなければならないということを本当に強く感じています。

ありがとうございます!

+1

問題を表示して最小の可能性のある例が得られるまで、コードを削除する以外の具体的なアドバイスを提供することは難しい –

+0

代替サーバーで実行し、reproできるようになるまで一定のCURL要求でヒットします。 – peterept

+0

アドバイス: 'string = string1 + string 2'や' string + = string1'をしないでください。 Do: 'string << string 1'、このように追加の文字列は作成されません。 – apneadiving

答えて

8

これは絶対にばかげていますが、2週間の不安と闘争の末、私はこのリークを解決しました。それは文字通りすべてがこの1行に来た:

ActionMailer::Base.delivery_method = :smtp 

私のapplication.rbの設定ファイルに来た。私はそれが間違って得た方法

config.action_mailer.delivery_method = :smtp 

私はわかりませんが、少年はそれが私のアプリの上に大混乱をもたらすでした:

それはされている必要があります。

これがこのような問題を引き起こす理由を知っている人はいますか? 1回のクエリごとに約1メガバイトのメモリが失われていました。クレイジー。

+1

これをお寄せいただきありがとうございました。 – tyler

+1

これをどのように把握しましたか? My Railsアプリは弦楽器を狂ったようにしていて、何を作成しているかをどのようにトレースするかわかりません。 –

+2

@MihaRekarそれはひどかった。私は文字通り何ヶ月かのコミットを経て、それぞれロードして起動し、Apacheベンチマークツールを使用してサーバーにリクエストを送信して問題がなかったリビジョンを見つけました。それから、漏れを止めたものが見つかるまで、私はピース・バイ・ピースで各変更を削除しました。それには数日かかりました。 –