我使用相同的jvm选项在tomcat和jetty中运行webapp,但是我得到了完全不同的gc输出。
jdk: jdk1.8.0_45
tomcat: tomcat-8.0.22
jetty: jetty-9.2
jvm选项:
-Xmx4G -Xms4G -XX:+UseG1GC -XX:MaxGCPauseMillis=400 -XX:SurvivorRatio=8
-XX:+PrintGCDateStamps -XX:+PrintGCDetails -Xloggc:/opt/logs/gc/timediff-gc-tomcat.log -XX:+UseGCLogFileRotation
-XX:NumberOfGCLogFiles=10 -XX:GCLogFileSize=3M -XX:+HeapDumpOnOutOfMemoryError
-XX:HeapDumpPath=/opt/logs/gc/timediff-tomcat-oom.hprof
我使用jstat -gc 8339 20s
来获取gc输出。
tomcat下的gc输出:
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
0.0 19456.0 0.0 19456.0 1963008.0 454656.0 1163264.0 23188.0 41932.0 41027.3 4812.0 4617.4 12 0.419 0 0.000 0.419
0.0 19456.0 0.0 19456.0 1963008.0 523264.0 1163264.0 23188.0 41932.0 41027.3 4812.0 4617.4 12 0.419 0 0.000 0.419
0.0 19456.0 0.0 19456.0 1963008.0 586752.0 1163264.0 23188.0 41932.0 41027.3 4812.0 4617.4 12 0.419 0 0.000 0.419
0.0 19456.0 0.0 19456.0 1963008.0 651264.0 1163264.0 23188.0 41932.0 41027.3 4812.0 4617.4 12 0.419 0 0.000 0.419
0.0 19456.0 0.0 19456.0 1963008.0 715776.0 1163264.0 23188.0 41932.0 41027.3 4812.0 4617.4 12 0.419 0 0.000 0.419
0.0 19456.0 0.0 19456.0 1963008.0 780288.0 1163264.0 23188.0 41932.0 41027.3 4812.0 4617.4 12 0.419 0 0.000 0.419
0.0 19456.0 0.0 19456.0 1963008.0 843776.0 1163264.0 23188.0 41932.0 41027.3 4812.0 4617.4 12 0.419 0 0.000 0.419
0.0 19456.0 0.0 19456.0 1963008.0 908288.0 1163264.0 23188.0 41932.0 41027.3 4812.0 4617.4 12 0.419 0 0.000 0.419
码头下gc的输出:
S0C S1C S0U S1U EC EU OC OU MC MU CCSC CCSU YGC YGCT FGC FGCT GCT
0.0 8192.0 0.0 8192.0 382976.0 108544.0 3803136.0 47412.0 46208.0 45242.9 5248.0 4927.3 6 0.290 0 0.000 0.290
0.0 8192.0 0.0 8192.0 382976.0 108544.0 3803136.0 47412.0 46208.0 45242.9 5248.0 4927.3 6 0.290 0 0.000 0.290
0.0 8192.0 0.0 8192.0 382976.0 108544.0 3803136.0 47412.0 46208.0 45242.9 5248.0 4927.3 6 0.290 0 0.000 0.290
0.0 8192.0 0.0 8192.0 382976.0 112640.0 3803136.0 47412.0 46208.0 45242.9 5248.0 4927.3 6 0.290 0 0.000 0.290
0.0 8192.0 0.0 8192.0 382976.0 112640.0 3803136.0 47412.0 46208.0 45242.9 5248.0 4927.3 6 0.290 0 0.000 0.290
0.0 8192.0 0.0 8192.0 382976.0 112640.0 3803136.0 47412.0 46208.0 45242.9 5248.0 4927.3 6 0.290 0 0.000 0.290
0.0 8192.0 0.0 8192.0 382976.0 112640.0 3803136.0 47412.0 46208.0 45242.9 5248.0 4927.3 6 0.290 0 0.000 0.290
据我了解,总heap
是4G; -XX:NewRatio
的默认值为2,因此新容量约为2.6G,旧容量约为1.4G; -XX:SurvivorRatio
的值为8,因此伊甸容量约为2G,幸存者容量约为260M;所以我无法理解上面的gc日志。
有人可以帮忙吗?非常感谢!
答案 0 :(得分:3)
据我了解NewRatio
仅设置初始新生成大小。自适应大小调整策略将根据需要调整代数,以满足各种GC目标。
我认为你不应该开始调整这些东西,除非你的任何更高级别的目标(吞吐量,暂停时间,足迹)都没有达到。如果可以,请将其留给GC的启发式方法。