私の作業環境では、Windows Server 2008ハードウェア上で実行されるいくつかのエンタープライズJavaアプリケーションがあります。外部コンサルタントがJavaアプリケーションのパフォーマンスを見直しており、初期値と最大値を同一にすることを提案しています。Java初期値と最大メモリを同じ値に設定するパフォーマンス
現在、私たちは1GBの初期メモリと2GBの最大メモリを持つアプリケーションを実行しています。初期メモリと最大メモリの両方を2GBに変更することをお勧めします。 2ギガバイトの初期と最大値を割り当てることにより
彼らの推論が2倍である...
- は、Javaアプリケーションの起動時には、まっすぐに2GBのメモリブロックをつかむだろう。これにより、他のアプリケーションがこのメモリブロックにアクセスするのを防ぐので、このメモリは常にJavaアプリケーションで使用できます。これは現在の状況とは対照的です。最初のブロックが1GBしかないため、他のアプリケーションがサーバー上の残りのメモリを消費する可能性があり、エンタープライズJavaアプリケーションが2GBのメモリに拡張できない可能性があります。最大。
- Javaが初期サイズと最大サイズの間でメモリを割り当てる必要があるたびに、パフォーマンスが低下します。これは、Windowsに移動し、必要なサイズの新しいブロックを割り当ててから使用する必要があるためです。このパフォーマンス・ヒットは、初期サイズと最大サイズの間にメモリが必要になるたびに発生します。したがって、両方を同じ値に設定すると、このパフォーマンスの影響が取り除かれます。
私の最初の点は安全性の観点からは有効だと思います。なぜなら、Javaアプリケーションはサーバー上で他のアプリケーションが何をしているかにかかわらず常に最大メモリにアクセスできるからです。しかし、他のアプリケーションでは使用できない大きなメモリブロックが存在するため、一般的なサーバーのパフォーマンス上の問題を引き起こす可能性があるため、これは否定できないとも考えています。
ポイント2で議論したパフォーマンスの影響はおそらく無視できるほど小さいと思います。彼らがパフォーマンスを心配しているならば、メモリブロックを割り当てることによるパフォーマンスへの影響を心配するのではなく、Javaのガベージコレクションのようなものを調整する方が良いでしょう。
誰でも、初期値と最大値を同じ値に割り当てることができるかどうかを教えてください。いずれかの一般的な推奨事項はありますか?
あなたは、若い世代と終身者の比率を制御できます。より小さなヒープは小さな若い世代を意味する必要はありません。ほとんどの短命オブジェクトを作成するアプリケーションがある場合、簡単に50%+若い世代に行くことができます。 (これは一般的に私がサーバをセットアップする方法です) – bestsss
本当に、私は大きなエデンスペース(約4 - 16 GB)を設定し、それ以外のものは約1 - 2 GBのままにします。私が1日に16 GB以下のゴミを生産した場合、その日中にマイナーなGCをすることは避けることができます。 –
オハイオ州はまったく異なるアプローチです:)。通常の負荷(1500 simult。ユーザー)での通常の割り当て速度は250 + MB/sになります。私はそれがゴミを避けるか、単にそれを抱いていると思う。キーは、中程度の寿命のオブジェクトを避けることです。 – bestsss