3

j7u5、G1GCを使用

"-Xms3200m -Xmx3200m -XX:+UseG1GC -XX:ParallelGCThreads=14 -XX:ConcGCThreads=4 -XX:MaxGCPauseMillis=40 -XX:NewRatio=2 -XX:SurvivorRatio=10 -XX:+PrintGC -XX:+PrintGCDateStamps"

特定のパフォーマンス テストで、私のアプリケーションは 5 時間実行した後、予想どおり長い一時停止に陥りました。この大きなもの (そして唯一のもの) を除いて、小さなイニシャル マーク フェーズがあります。

この長い一時停止に何が起こっているのかを把握するための提案と、レイテンシの目標 (パーセンタイル 98%、99.999%) に影響を与えるような長い一時停止を回避するために調整する方法はありますか?

2012-12-22T09:48:57.966+0000: [GC pause (young) 2436M->1460M(3200M), 0.0627090 secs]
2012-12-22T09:49:07.295+0000: [GC pause (young) 2458M->1481M(3200M), 0.0871760 secs]
2012-12-22T09:49:18.905+0000: [GC pause (young) 2479M->1503M(3200M), 0.0930280 secs]
2012-12-22T09:49:32.366+0000: [GC pause (young) 2501M->1524M(3200M), 0.0827900 secs]
2012-12-22T09:49:44.576+0000: [GC pause (young) (initial-mark) 2522M->1546M(3200M), 3.4979530 secs]
2012-12-22T09:49:48.074+0000: [GC concurrent-root-region-scan-start]
2012-12-22T09:49:48.079+0000: [GC concurrent-root-region-scan-end, 0.0056590]
2012-12-22T09:49:48.080+0000: [GC concurrent-mark-start]
2012-12-22T09:49:48.173+0000: [GC concurrent-mark-end, 0.0932560 sec]
2012-12-22T09:49:48.180+0000: [GC remark, 0.0470160 secs]
2012-12-22T09:49:48.232+0000: [GC cleanup 1585M->944M(3200M), 0.0180490 secs]
2012-12-22T09:49:48.251+0000: [GC concurrent-cleanup-start]
2012-12-22T09:49:48.255+0000: [GC concurrent-cleanup-end, 0.0047270]
4

2 に答える 2

2

ロギングに-XX:+PrintGCTimeStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTimeは、問題とボトルネックをよりよく理解するために使用します

-XX:+UnlockExperimentalVMOptions -XX:+AggressiveOpts -XX:+DoEscapeAnalysis -XX:+UseCompressedOopsG1GCでオプションを使用することをお勧めします(これらがネイティブマシン/サーバーおよびJDKバージョンでサポートされている場合)

また-XX:GCPauseIntervalMillis=VALUE、組み合わせて使用​​してください-XX:MaxGCPauseMillis=VALUE (一時停止を制御します。いくつかの研究開発を行うことで、両方のパラメーターの最適な値の組み合わせを取得する方が適切です) ところで、値の組み合わせは-XX:MaxGCPauseMillis = 400 -XX:GCPauseIntervalMillisとして正常に使用されています。 = 8000

paramのデフォルト値-XX:NewRatioは40であるため、40または40を超える値にすることをお勧めします。-XX:NewRatio=50

于 2013-02-20T14:37:02.627 に答える
0

G1 GC は、変更なしで効率的に動作できるようにするデフォルトの適応型ガベージ コレクタです。詳細については、以下の質問を参照してください。

Java 7 (JDK 7) ガベージ コレクションと G1 に関するドキュメント

オラクルが推奨する上記の推奨事項に従う場合:

  1. 以下のパラメータを削除

    -XX:SurvivorRatio=10 
    
  2. MaxGCPauseMillis=40に比べて攻撃的すぎるdefault value of 200 ms。妥当な一時停止時間の目標を設定します。

  3. 変更 -XX:ParallelGCThreads=14 -XX:ConcGCThreads=4サーバーの CPU コア数に応じた推奨事項に従ってください。

于 2016-02-19T06:06:47.110 に答える