2016-07-09 3 views
3

こんにちは私は、メモリデータグリッドを使用して150GBのヒープメモリプログラムのケースを持っています。私は、1つのマシンを使用するための運用部門からの狂気の要求があります。今では、パラレルガベージコレクタが150GBを超えて使用されている場合、FULL GCが呼び出されるとおそらく数十分のガベージコレクションになります。非対話型アプリケーションで150GBのヒープを処理する

私の希望は、Java 9がShenandoah low pause GCに来ることでした。残念ながら、私はそれがJava 9での配信のために記載されていないと思っています。誰もそれについて何も知らないのですか?

決して少なくても、この量のヒープメモリでG1 GCがどのように機能するのだろうか。

最後に最後の質問です。私は2時間で完了するはずの非対話的なバッチアプリケーションを持っているので、言うことができます。ここでの主な目標は、Full GCが決してキックインされないようにすることです。十分なメモリがあることを確認すると、到達可能な最大ヒープが150で、250GBに割り当てることができますGCは決して蹴らないでしょうか?新世代+旧世代が最大ヒープに触れると、通常はフルGCがトリガーされます。別の方法でトリガーできますか?

重複したリクエストがありました。この質問が重複していない理由をここで説明しようとします。最初に、150GBのHeapについて言及しています。これは、質問に全く異なる次元を追加します。私はRMIを使用していません。第三に、G1ガベージコレクタについての質問です。32GBのヒープバリアを越えて64ビットアドレス空間に入ったら、私はそれを納得させることができません。 <についての質問32GBヒープは、ヒープ> 32GBの質問と同じです。例えば、Permacesが存在しないため、Java 7以降に変更されたことはありません。

+0

今後の機能に関する技術的な質問ですが、私が気付いていないスタックオーバーフロールールには何かがありますか? –

+0

この質問の主な動機は、私が100GB + HEAPを必要とするアプリケーションを持っていることと、ガベージコレクションの潜在的な問題に関してオプションを探しているからです。 –

+0

私は編集者の編集でSOのポリシーに合格することを願っています。改善できると思ったら教えてください。 –

答えて

4

コンパクトGCの経験則では、1コアあたり1GBのライブオブジェクトを処理できるはずです。

ハスウェルのI7(4コア/ 8スレッド)と平行コレクタと20ギガバイトのヒープ上の例:

[24.757s][info][gc,heap  ] GC(109) PSYoungGen: 129280K->0K(917504K) 
[24.757s][info][gc,heap  ] GC(109) ParOldGen: 19471666K->7812244K(19922944K) 
[24.757s][info][gc    ] GC(109) Pause Full (Ergonomics) 19141M->7629M(20352M) (23.791s, 24.757s) 966.174ms 
[24.757s][info][gc,cpu   ] GC(109) User=6.41s Sys=0.02s Real=0.97s 

7.6ギガバイトであり、圧縮後のライブセット。これは並列処理のために6.4秒分のCPU時間を要し、これは< 1秒の休止時間に変換されます。

原則として、マルチコアシステムでは、ほとんどのヒープがライブオブジェクトで構成されている場合でも、パラレルコレクタは150GBのヒープを全GC時間で<〜2分間処理できます。

もちろんこれはあくまで目安です。負それに影響を与えることができますいくつかのもの:

  • ページング
  • NUMA構成で
  • 他のプロセスを非常に大規模からなる
  • ワークロード、参照、重いもの
  • 非ローカルメモリトラフィックを絞る熱CPU CPU時間と競合する。
  • 弱い/柔らかい参照の重い使用

場合によっては、このスループットを達成するためにチューニングが必要な場合があります。

これにもかかわらず、パラレルコレクタが機能しない場合、CMSとG1は実行可能な代替方法ですが、JVMで使用できる十分なスペアヒープ容量とCPUコアがある場合のみです。彼らは完全なGCを危険にさらすことなく並行作業を行うために重要な呼吸スペースが必要です。

私はインタラクティブではないと言いましたが、それでも私は厳格なライセンス契約を結んでいます。私は1時間で全体の処理を完了する必要があります。だから私は世界の出来事を止めるのに30分もかからない。

基本的に、あなたは本当にCMS、G1、シェナンドーまたはジングは、(彼らも大きなヒープ上< 100ms以上でも< 10ミリ秒を目指す)を目指すという意味で、低休止時間を必要としません。

あなたが必要とするのは、STWの休止時間は計算時間のかなりの部分を食べるほど致命的ではないということです。

これは、使用可能なコレクタのほとんどで可能ですが、シリアルのものは無視してください。

実際には、病的な場合がありますが、それらが落ちる可能性がありますが、実際の作業負荷でシステムをセットアップしてテストを実行する必要があります。実際の問題が発生した場合は、詳細を質問することができます。

+0

ありがとう私はあなたのポストを考える時間が必要です。戻ってくるだろう。 –

+0

こんにちは/ソフトリファレンスの重い使用について少しお伝えできます。これがなぜ速度を低下させるのか?それはメモリの断片化のためですか? –

+0

ローカルのPCでも、G1コレクタはParallelコレクタに比べて実行時間が向上しました。私はその反対を期待していた。数分かけてテストを実行していますので、テストの設定ではありません。 –

関連する問題