2013-04-01 6 views
5

できるだけ多くのCPUを使用するJavaアプリケーションと、それに多くのメモリ(最大80Gb)を使用しています。javaでGC時間を増やすには?

私はそのアプリケーションのGCを最適化しています.GVMに一定の割合(60%)を使用するようにJVMに指示する必要があります。そうしないと、GCにない時間が処理され、メモリ。

私は -XX:CMSIncrementalDutyCycle=60パラメータは、私が探していると、他のパラメータは、GCへのより多くの電力を与えることがある場合

おかげで(私はすでにCMSIncrementalPacingCMSIncrementalDutyCycleMinを見てきました)ものであることを確認したかったです束! CMSIncrementalDutyCycle = 60パラメータ 私が探しているTHIGあると に他のパラメータは、GCへのより多くの電力を与えるがあれば(私はすでにCMSIncrementalPacingを見てきました:私はXXがあることを確認したかった

+1

「XX:CMSIncrementalDutyCycle = 60パラメータが私が探していることを確認したかった」 - 試してみてGCロギングを有効にしてみてください。また、好奇心から:それはあなたがGCで費やした60%の時間のために十分なゴミを大量に作成していないのですか? – millimoose

答えて

1

お客様は、GC収集中のCPU使用率についてはの上限をに設定できません。

CMSIncrementalDutyCycleに使用されているが( [1]を参照)マイナーコレクションの間の時間を設定するので、あなたはどのくらいの頻度GCが実行され、間接的にCPU使用率を制御することができます。しかし、CPU使用率を直接制御できるパラメータはありません。

+1

実際、CMSIncrementalDutyCycleでは間接的な制御しかできません。悲しいかな、私の問題は、若い世代を大幅に減らすことで解決されました。ありがとう、すべての束。 – mors

1

およびCMSIncrementalDutyCycleMin)

いいえ、間違っています。このフラグは、JVMのGCに割り当てられる使用可能なCPUの割合を制御しません。ドキュメントの状態:

-XX:CMSIncrementalDutyCycle=<N> default: 50 

これは同時コレクタの実行を許可され マイナーコレクション間の時間の割合(0〜100)です。 CMSIncrementalPacingが である場合、これは初期値に過ぎません。

だから、あなたはCMSコレクタ(-XX:+UseConcMarkSweepGC)を使用していると仮定して、その後、フラグは、上記CMSはマイナーGCコレクションの間で実行することが許可されている時間の割合を制御します。

GCスレッドが実行する時間を直接制御できるフラグはありません。

+0

だから、GC以外のマイナーコレクション間で何が起こるのですか? – mors

+0

アプリケーションが実行され、jitメソッドなどがコンパイルされます –

+0

「-XX:+ CMSIncrementalMode」が有効になっていると仮定してください。これは「大きな」ボックスには適していません –

1

まず、CMSIncreamentalDutyCycleは、増分CMSアルゴリズム(-XX:+CMSIncrementalModeによって有効にする必要があります)に影響します。インクリメンタル・モードは、あなたの仕事にとっては決して悪いことです。

第2に、GCタスクが消費するCPUコアの数を制限することができます。

  • -XX:ParallelGCThreads=Nあなたはより多くのGC関連オプションhereを見つけることができ
  • -XX:ConcGCThreads=Nセット(のみCMS用)並行タスクのためのコアの数

ストップ・ワールド・フェーズのためにコアの数を設定します。

関連する問題