2016-04-26 12 views
1

私のアプリケーションは、私のコントローラ内で操作されるたくさんのデータを返すAPIの束を呼び出し、様々な洞察を与えます(私のビューに渡されます)。私のRuby on Railsアプリケーションでのメモリリーク

問題は、アプリケーションのメモリリークが発生していて、現在、数回の要求の後にアプリケーションを再起動する必要があることです。

また、アプリケーションのパフォーマンスを向上させるために、私はすべてのAPIコールをキャッシュしています。私のデータの大部分は、APIによって返されたときにハッシュの形で格納され、このデータは操作されます(groupbyを使用して複製されます)。

私はRuby 1.9とRails 3.2を使用しています。私はアプリケーションからこのメモリリークを取り除く方法を知る必要があります。

+0

メモリリークが発生している可能性がありますか、キャッシュがメモリを使い果たしている可能性がありますか(キャッシュのためです)。またコードを投稿すると、コードなしで推測できるのです。 – spickermann

+0

私はキャッシュフォルダのサイズを見ましたが、大きすぎるとは思われません。約20MBです。私はコードを投稿したでしょうが、他のモジュールとの依存関係が複雑すぎます。私はプログラマーがRoRでメモリリークの原因となる一般的な落とし穴を探しています。 – amair

+0

補足として: - [Ruby 1.9](https://www.ruby-lang.org/en/news/2014/01/10/ruby-1-9-3-will-end-on-2015) /)と[Rails 3.2](http://weblog.rubyonrails.org/2015/1/6/Rails-4-1-9-and-4-0-13-have-been-released/) - 旧式です。このバージョンのバグ修正やセキュリティアップデートはありません。新しいバージョンにアップグレードすることを検討することもできます。 – spickermann

答えて

2

まず、メモリリークのあるRubyの宝石のリストを確認できます。

は、あなたが実際にメモリリークではなく、メモリの肥大化を持っていることを、確認する必要があります(https://github.com/ASoftCo/leaky-gems

+1

Nopes ..私はこれらの宝石のどれも使っていませんが、本当に役立つリストです。 – amair

3

を参照してください。 ruby​​について読むことができますGC here

GC.stat[:heap_live_slot] - これは前回のGC後に消去されないオブジェクトを表します。この番号が要求によって要求を着実に増加させる場合は、メモリリークがあることを確認できます。

+0

これは良い方法です。私はかなりのメモリリークを持っていると確信しているので、私のアプリケーションがクラッシュする要求の特定の数の後に膨らんでいません。私のロジックをもっとモジュールに移すべきなのでしょうか? – amair

関連する問題