相同的jvm选项,tomcat和jetty的不同gc输出

时间:2015-06-26 08:39:36

标签: java tomcat garbage-collection jvm jetty

我使用相同的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日志。

有人可以帮忙吗?非常感谢!

1 个答案:

答案 0 :(得分:3)

据我了解NewRatio仅设置初始新生成大小。自适应大小调整策略将根据需要调整代数,以满足各种GC目标。

我认为你不应该开始调整这些东西,除非你的任何更高级别的目标(吞吐量,暂停时间,足迹)都没有达到。如果可以,请将其留给GC的启发式方法。