2012-01-11 9 views
2

ロードバランサの背後にあるサーバーのプールがあります。このプール内のマシンは平均して6秒ごとにガベージコレクションを行います。ガベージコレクトには約0.5秒かかります。また、ガベージコレクション中にCPUスパイクが発生することもあります。Javaガベージコレクション - CPUスパイク - 接続確立時間の延長

クライアントマシンは、1日のうちにサーバーとの接続に平均10分の1の時間を要します。

理論:CPUがGCを実行しているので、接続を高速に割り当てることができません。

これは有効な理論ですか?

JVM:IBM GCアルゴリズム:genconの 保育園:5ギガバイト ヒープサイズ:18ギガバイト

+0

GCが発生すると、CPUが何らかの作業を行う必要がありますが、CPUサイクルを実行する可能性が最も高いGCの*ロット*(半分の価値)があるようです。 – Deco

+0

Nursery GCの1/2秒のGC時間はありますか? – AngerClown

+0

保育園用。保育園はとても速く満ちています。したがって、ピーク負荷時に6秒ごとにGCを実行する必要があります。 –

答えて

3

私は全てのベットがオフになっていることを多くの割り当てと言うだろう - それは絶対に時間をかけて悪化し得ることができ、I 1日中6秒ごとにGCを実行していると問題があるようです。

あなたはそのコードにアクセスできますか?オブジェクトを再利用するために書き直すことができ、割り当てについてもっと知的なものにすることはできますか?私はいくつかの組み込みシステムをやったことがありますが、システムが起動していれば、新しいものを呼び出すことは決してありません。(システム全体を制御できるなら、まともなことができます)

コードにアクセスできない場合は、利用可能なGCチューニングオプション(使用されているガベージコレクタの選択を含む)のいくつかを確認してください。どちらもJDKとサードパーティオプションで配布されています。いくつかのコマンドラインを変更すれば、パフォーマンスを向上させることができます。

+0

ヒープサイズが大きくなり、非常に頻繁に起こったCPUスパイクが減少するようです。我々は、アプリケーションをプロファイルして、私たちがどこのメモリをどこで使用しているかを見ています。 –

+0

ループ内で "new"を探します。オブジェクトのツリー全体をインスタンス化するだけで、小さな断片を取り出して次の繰り返しで忘れることができます。良いプロファイラーも大いに役立ちます。がんばろう。 –

2

私はそう思います。

ガーベジコレクションはそのような集中的なプロセスですが、6秒ごとに何らかの理由がありますか?私はIBM JVMや使用している特定の収集アルゴリズムに精通していないので、実際にそれらについてコメントすることはできません。しかし、さまざまな種類のコレクタについて説明し、それらを使用する場合は、サンが提供する(現在オラクル社によって提供されている)チューニング・ドキュメントがいくつかあります。いくつかのアイデアについては、this linkを参照してください。

あなたの理論を証明する1つの方法は、接続が要求された時刻と実際に割り当てられた時刻を記録するコードを追加することです。 GC関連のCPUスパイクが接続の割り当てに長い時間を要するように見える場合、それはあなたの理論を証明します。あなたの問題はそれを回避する方法になります。

関連する問題