【问题标题】:Garbage collection YGCT and Garbage Collection Time keep rising垃圾收集 YGCT 和垃圾收集时间不断上升
【发布时间】:2012-06-28 21:26:43
【问题描述】:

我遇到了垃圾收集问题,在我们的系统上,垃圾收集时间一直呈线性上升,直到达到大约 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 中调试?

【问题讨论】:

  • 为什么 -Xms 和 -Xmx 相等?理想情况下它不应该相等。

标签: java tomcat6 garbage


【解决方案1】:

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

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

【讨论】:

  • 不,我注意到处理中的周期性极端峰值导致超时。这通常持续约 30 秒。在此之后,一切都再次变得超级快。我认为这是因为垃圾处理。
【解决方案2】:

YGC YGCT FGC FGCT GCT 将随着时间的推移而增加,因为它们是累积的。您应该感兴趣的是差异。

您的监控速度不够快,或者您经常进行 GC。我会尝试增加内存量,直到它看起来没有太大区别。例如我通常从 8 GB 堆和 6 GB 伊甸园空间开始,但您可能更喜欢不同的东西。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-01-21
    • 1970-01-01
    • 1970-01-01
    • 2018-12-30
    • 1970-01-01
    • 2012-03-21
    • 2013-01-15
    • 1970-01-01
    相关资源
    最近更新 更多