2011-09-14 12 views
4

JBoss AS5上で実行されているWebアプリケーションでチューニングベンチマークを実行しています。JVMは常にFULL GCで始まるのはなぜですか?

JMeterを使用して、低負荷からストレス負荷までさまざまなシナリオを作成しています。

私が気づいたことは、GCログは常に完全なGCで開始されることです。

誰かがこの現象を私に説明できますか?

ありがとうございます。

FWIWは、ここでのGCログからの抜粋です:それは常にGCで始まらない

17.560: [Full GC [PSYoungGen: 44456K->0K(458752K)] [ParOldGen: 0K->4385K(1572864K)]  44456K->4385K(2031616K) [PSPermGen: 11565K->11555K(262144K)], 0.9226691 secs] 
72.478: [GC [PSYoungGen: 393216K->30720K(458752K)] 397601K->35105K(2031616K), 0.1787110 secs] 
112.137: [GC [PSYoungGen: 423936K->38912K(458752K)] 428321K->43297K(2031616K), 0.2197971 secs] 
188.297: [GC [PSYoungGen: 432128K->54272K(458752K)] 436513K->58657K(2031616K), 0.3034273 secs] 
309.100: [GC [PSYoungGen: 447488K->60416K(458752K)] 451873K->64801K(2031616K), 0.3111470 secs] 
430.354: [GC [PSYoungGen: 453632K->65536K(454848K)] 458017K->72129K(2027712K), 0.3374716 secs] 
546.078: [GC [PSYoungGen: 454848K->65536K(415104K)] 461441K->78881K(1987968K), 0.3746511 secs] 
652.116: [GC [PSYoungGen: 415104K->40960K(436928K)] 428449K->88641K(2009792K), 0.3895185 secs] 
765.134: [GC [PSYoungGen: 390528K->28672K(437632K)] 438209K->94882K(2010496K), 0.2703870 secs] 
870.726: [GC [PSYoungGen: 380800K->23552K(375680K)] 447010K->102114K(1948544K), 0.1948568 secs] 
976.144: [GC [PSYoungGen: 375680K->18432K(436096K)] 454242K->110306K(2008960K), 0.1734677 secs] 

答えて

0

JbossコミュニティのPeter Johnsonの助けを借りて。私はこの質問の答えを知ることができました。

私はあなたと共有するためにここに書いています。

にSystem.gc()の呼び出しは、アプリケーション・サーバにコード化された(またはそれが使用するライブラリのいずれかに - 私は、RMIライブラリは、GCの呼び出しをしたい知っている)、それはからの遷移として、私は疑いますアプリケーションサーバー自体にブートストラップします。私は、デプロイメントやその他の主要な初期化作業の後に別のGCを2回実行するかもしれないと思います。私はこれの背後にあるアイデアは、ユーザーの要求を処理する前に、ヒープを可能な限りきれいにすることだったと思います。もちろん、それは何年も前にサーバーがそれほどメモリを持たず、ヒープが小さくなったときに意味をなさないものでした。 4.0.xから5.xまでのJBoss ASリリース(GC動作を6で監視していない)でこの動作が見られました。

2

、あなたは決してGCのプログラムを持つことができます。

しかし、JVMを起動すると、デフォルトで最小限のメモリが使用されます。

アプリケーションはデータ構造を構築しており、高い割合のオブジェクトが保持されます。これは正常な動作ではなく、サバイバーのスペースが使い尽くされる可能性があります。 JVMは、新しく作成されたほとんどのオブジェクトが破棄されることを前提に調整されています。生存者空間が使い尽くされると、Full GCがトリガーされます。

、あなたのアプリケーションがあなたに成長するどのくらいのメモリを知っているので

-ms512m -mx1g 

のようなオプションを使用することができ、フルGCは離れて行くだろうと、あなたはそれほど頻繁に収集します。

+0

+ Peterありがとうございます。これらのオプションは次のように設定されています:-Xms2g -Xmx2g –

+0

この場合、新しいサイズ '-XX:NewSize = 1g'を設定しようとします。通常、新しいアプリケーションでは8GBという新しいサイズから始めます。 ;) –

+0

+ Peterもう一度おねがいします。しかし若い世代のサイズをヒープ8GBよりも大きくするにはどうすればいいですか?新しいサイズを-XX:NewSize = 1gに設定しても、 –

関連する問題