here is the situation. I am running my application on a JBoss with the following JVM arguments " -Xms768m -Xmx768m" on a windows2000 with 1Gb of RAM.
Without doing even using the application, I notice a FullGC gets done every minute (default) and takes 3s. On a much more used computer, the GC takes up to 17s during which JBoss is, as expected, "brain dead". From a user standpoint, this is not horrific.
I tried to tune the GC and found out the problem comes from precompiled JSP that are stored in my application. When JBoss initializes, he stores them and they go directly in the tenured generation and stay there and account to up to 360Mo. Of course, a FullGC then gets called every time the GC is called.
I tried numerous solutions and here are results:
* the concurrent and incremental low pause collectors only aggravate the situation
* since the tenured collection is taking so much space compared to the others, I tried to increase its size ("-XX:NewRatio=100), still with no success.
* another way was to try another collector and increase the threshold when the FullGC gets called "-XX:+UseConcMarkSweepGC -XX:CMSInitiatingOccupancyFraction=90". Nothing.
The problem really comes from the fact that my tenured stays this size after being collected. So every time the GC repasses through the whole 360Mo of precompiled JSPs!
Is there any way of forcing them in the PermanentGeneration collection? Or would you see another solution?
Thanks for any help!
JBoss version? You can also precompile your .JSP files with jspc.