2012-04-26 12 views
2

私はあなたが文書や画像をアップロードし、これらをバイト[]としてデータベースに保存するアプリケーションを持っています。grailsのbyte []のメモリリーク2.0.3

(私はあなたがここにジップとしてダウンロードして、STS http://dl.dropbox.com/u/2342474/byteMemoryLeak.zipにインポートすることができ、最小限のサンプルプロジェクトを作成...あなたはTODOを持っているすべてはdatasource.groovyに行き、あなたのデシベルの設定を変更している)

ので、ドメインオブジェクトは、次のようなものになります。

class Test { 

    byte[] data 

    static constraints = { 
     data nullable: false, maxSize: 1024*1024*40 
    } 
} 

とコントローラを、我々は我々が行くプロジェクトを開始するときのビューは、すべてのだから今...ここで変更生成-allコマンドを...何と直接

を生成していますテストコントロールにler ...ヒットを新規作成する...ドキュメントをアップロードする... 5 - 10 MBのようなものを使用して作成する...

save()メソッドが実行されてからshowメソッドが呼び出されたときにも、それらが終了すると、GCはそれらのオブジェクトをピックアップして、それらが現在必要でないので、それらを捨てるはずです...今、私はあなたのKit Java Profilerを使って、メモリの使用量と私は弱い参照を持っているか、到達不可能な私のバイト[]の3つの参照があることがわかります...それはなぜですか?彼らはshow()メソッドまたはsave()メソッドが完了した時点で削除されていませんか?ここで

スクリーンショット:[メモリリーク]:http://i.imgur.com/XGj6A.png

は、私はより頻繁にGCを実行するために、Tomcatのための特別な設定を行う必要がありますか?

私はこれについて非常に混乱しています。実際にテストしているアプリケーションでは、多くのドキュメントをアップロードしているため、ヒープメモリが完全に完全になり、ほとんど決してクリーニングされませんだから私はいくつかの点ではメモリの例外が発生する...実際には、それはすべてのオブジェクトをロードし、現在は実際に各オブジェクトのバイト[]がロードされ、現在のメモリとdoesntのリスト()メソッドでも発生しますクリーンアップ...

たぶん私はちょうど何かが足りないか、何か間違ったことをやっている...すべてのヘルプは大...

おかげ クリスをいただければ幸います

+2

+1の間の短い期間のために一時停止されています。私からの答えは申し訳ありませんが、私はこれを見ています。 – David

答えて

3

Grailsアプリケーションは通常、サーバモードで作成されたJREで動作し、メモリの動作に影響を与えます。基本的には、「クライアント」モードで実行している場合、より少ないメモリーを使用してより頻繁に解放しようとしますが、サーバー・モードで実行するとJREはより多くのメモリーを使用してより高速になります。 Real differences between “java -server” and “java -client”

基本的に、JREは、ヒープが限界まで成長し、その後でのみメモリを解放することを考えます。

サンプルをダウンロードして起動した後、同じファイルを何度もアップロードしました。 Javaプロセスのメモリ使用量は次のように増加します(要求ごとに822MB→917MB→1.03MB)。次のアップロードではメモリ使用量は増加せず、PermGen空間例外もスローされませんでした。

あなたが経験しているのはJREがGCをまだ実行しないようにしようとしていることです(一般的にGCを実行すると新しいメモリを割り当てるのが遅くなります)。

+0

まあ私の問題は、私は実際には、実際には、成長を続け、ファイルをアップロードする人々からメモリを成長し、私は十分に速くそれをクリーニングしていないと思うのアプリケーションを持っている...あなたはそれをチューニングするための任意のjvmオプション? –

+0

ヒープサイズは何ですか> – allthenutsandbolts

0

あなたはオプションを使用して試すことができ-XX:+ UseConcMarkSweepGCを。このオプションは、アプリケーションの実行と並行してテナント収集を収集します。アプリは、サンプルプロジェクトの人々は、あなたの質問に入れていくつかの良い努力を見て、偉大ダウンロードすることができますを含むために収集

+0

ありがとうございました... –

関連する問題