使用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]
答案 0 :(得分:2)
进行日志记录,使用-XX:+PrintGCTimeStamps -XX:+PrintGCApplicationStoppedTime -XX:+PrintGCApplicationConcurrentTime
更好地了解问题和瓶颈
建议在G1GC 中使用-XX:+UnlockExperimentalVMOptions -XX:+AggressiveOpts -XX:+DoEscapeAnalysis -XX:+UseCompressedOops
选项(如果本机/服务器和JDK版本支持这些选项)
另请使用-XX:GCPauseIntervalMillis=VALUE
与-XX:MaxGCPauseMillis=VALUE
的组合(它会控制您的停顿,通过做一些R&amp; D更好地获得两个参数的最佳拟合值)< / em> BTW我们成功使用值组合作为-XX:MaxGCPauseMillis = 400 -XX:GCPauseIntervalMillis = 8000
-XX:NewRatio
param的默认值为40,因此最好将其设为40或40以上-XX:NewRatio=50
答案 1 :(得分:0)
G1 GC是一个自适应垃圾收集器,其默认设置使其无需修改即可高效工作。有关详细信息,请参阅以下问题。
Java 7 (JDK 7) garbage collection and documentation on G1
如果您遵循oracle建议的上述建议:
删除以下参数
-XX:SurvivorRatio=10
MaxGCPauseMillis=40
相比, default value of 200 ms
过于激进。有一个合理的暂停时间目标。
根据您的服务器中的CPU核心数量,根据建议更改 - XX:ParallelGCThreads=14 -XX:ConcGCThreads=4
。