I'm using WebSphere Application Server and the WAS servers runs using IBM JVM with a Garbage Collection policy called Generational Concurrent (gencon), which splits heap memory into two parts:
Nursery: for new objects
Tenured: long lived objects
Reading native_stderr.log I could see that garbage collector is running to many time triggered by allocation failure on nursery area.
Here I have a strange behavior.
My JVM is configured with a maximum of 20gb.
My Nursery area actually almost 4gb. Look the graph (pink line) below.
When GC run, it frees almost 3.5gb. After some seconds (about 30s for example), all this 3.5 is already consumed and GC needs to run again... and it frees almos 3.5gb again, and after some seconds is all consumed again, so GC runs again and I have this kind of infinite loop on GC.
Look the table below and you'll this behavior.
Is there a way to check who(threads, objects) is consuming the nursery area so fast?
I really appreciate any help.
Thanks