Marc
Marc

Reputation: 7022

Garbage collection YGCT and Garbage Collection Time keep rising

I'm having a garbage collection problem where on our system, garbage collection time keeps rising lineairly until it reaches a constant of around 25 seconds.

  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

This is just a snapshot of activity as I executed a little load test.

I reviewed some snapshot, at which I'm not an expert, and did in fact find some memory problems. The obvious ones are now resolved.

The machine has the following settings

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
" 

We use Java 6, Tomcat6, Spring Framework, Hibernate, EHCache for caching and use Quartz for various scheduling tasks. This item link actually helped resolve some issues which did lead to MAT reporting potential memory leaks, which is no longer the case.

We played around a lot with all sorts of JVM settings on our test box but in all cases Garbage Collection Time kept growing to unacceptable levels, mainly because of the ever growing YGCT. Initially, I thought the cache was the culprit as we do cache object graphs and don't just use the Hibernate Second Level cache. But the memory use of the cache in MAT didn't seem that excessive at about 18Mbs size.

Is this a memory leak or should I just be throwing more memory at it? If it is a memory leak, how can I best debug that in MAT?

Upvotes: 1

Views: 1224

Answers (2)

Peter Lawrey
Peter Lawrey

Reputation: 533750

The YGC YGCT FGC FGCT GCT will all increase over time as they are cumulative. WHat you should be interested in is the difference.

Either you are not monitoring fast enough or you are GCing quite often. I would try increasing the amount of memory until it doesn't appear to make much difference. e.g. I usually start at an 8 GB heap with a 6 GB eden space, but you may prefer something different.

Upvotes: 0

Tomasz Jędzierowski
Tomasz Jędzierowski

Reputation: 969

To my understanding this is absolutely normal. The YGCT column reports a sum of all YGC actions since the JVM startup. The same goes for FGCT and GCT of course.

Do You notice any performance hit after some time or is this question of pure scientific nature?

Upvotes: 1

Related Questions