垃圾收集YGCT和垃圾收集时间不断上升

时间:2012-06-27 12:35:22

标签: java tomcat6 garbage

我遇到了垃圾收集问题,在我们的系统上,垃圾收集时间不断上升,直到达到25秒左右的常量。

  S0     S1     E      O      P     YGC     YGCT    FGC    FGCT     GCT
  0.00  84.18  76.65  35.47  60.16    441   15.581    16    1.834   17.415
 75.72   0.00  97.32  35.47  60.16    442   15.770    16    1.834   17.604
  0.00  64.69  35.56  35.86  60.16    443   16.318    16    1.834   18.153
100.00   0.00  19.91  35.87  60.16    444   16.381    16    1.834   18.215
  0.00  70.61  40.85  36.82  60.17    445   17.488    16    1.834   19.322
 28.80   0.00  19.61  36.82  60.17    446   17.535    16    1.834   19.369
 34.51   0.00  48.01  36.82  60.18    448   17.561    16    1.834   19.395
  0.00  10.86  20.48  37.11  60.21    453   17.979    16    1.834   19.813
  9.04   0.00  47.39  37.12  60.23    454   18.063    16    1.834   19.898
  0.00  71.26   2.65  37.14  60.23    455   18.173    16    1.834   20.007
 63.64   0.00  90.91  38.04  60.23    456   19.562    16    1.834   21.396
  0.00  76.45  42.70  38.04  60.23    457   19.592    16    1.834   21.426

这只是我执行一点负载测试时活动的快照。

我回顾了一些我不是专家的快照,事实上确实发现了一些内存问题。显而易见的是现在已经解决了。

本机具有以下设置

JAVA_OPTS="$JAVA_OPTS 
-server 
-Xms704m 
-Xmx704m 
-XX:+HeapDumpOnOutOfMemoryError 
-XX:HeapDumpPath=/var/log/tomcat6 
-XX:MaxPermSize=192m 
-XX:+UseConcMarkSweepGC 
-XX:+CMSIncrementalMode 
-XX:+CMSIncrementalPacing 
-XX:+DisableExplicitGC
" 

我们使用Java 6,Tomcat6,Spring Framework,Hibernate,EHCache进行缓存,并使用Quartz进行各种调度任务。这个项目link实际上帮助解决了导致MAT报告潜在内存泄漏的一些问题,而现在已不再是这样了。

我们在测试盒上使用各种JVM设置玩了很多,但在所有情况下垃圾收集时间都在不断增长到不可接受的水平,主要是因为YGCT不断增长。最初,我认为缓存是罪魁祸首,因为我们会缓存对象图,而不只是使用Hibernate二级缓存。但MAT中缓存的内存使用似乎并不过于大约18Mbs。

这是内存泄漏还是我应该向它投入更多内存?如果是内存泄漏,我怎样才能在MAT中最好地调试它?

2 个答案:

答案 0 :(得分:1)

根据我的理解,这绝对是正常的。 YGCT列报告自JVM启动以来所有YGC操作的总和。当然,FGCT和GCT也是如此。

您是否注意到一段时间后性能受到影响,或者这是纯科学性质的问题?

答案 1 :(得分:0)

YGC YGCT FGC FGCT GCT随着时间的推移会逐渐增加。你应该感兴趣的是差异。

要么你的监视速度不够快,要么你经常进行GCing。我会尝试增加内存量,直到它看起来没什么区别。例如我通常从具有6 GB eden空间的8 GB堆开始,但您可能更喜欢不同的东西。