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:NewRatio40,因此最好设置为 40 或大于 40,例如-XX:NewRatio=50

于 2013-02-20T14:37:02.627 回答
0

G1 GC 是一种自适应垃圾收集器,其默认设置使其无需修改即可高效工作。有关详细信息,请参阅以下问题。

G1 上的 Java 7 (JDK 7) 垃圾收集和文档

如果您遵循 oracle 推荐的上述建议:

  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 回答