Rich
Rich

Reputation: 15757

The various options for solving PermGen problems

I am looking into the various options around garbage collection on a Java 6 18 VM and would like some pointers.

We run our application on JBoss, and occasionally there are the infamous PermGen errors during redeploys. There is a lot of conflicting and obsolete information on the internet about the best way to solve or mitigate this problem.

From what I can see, the following is correct:

I have two questions resulting from this:

  1. Is the above correct?
  2. Where do the VM options CMSClassUnloadingEnabled and CMSPermGenSweepingEnabled come into this? From what I can see CMSClassUnloadingEnabled supercedes or implicitly enables CMSPermGenSweepingEnabled. Do either of them help with the above problem?

Upvotes: 10

Views: 5848

Answers (2)

Martin Vysny
Martin Vysny

Reputation: 3201

Long but good reading: http://victor-jan.blogspot.com/2010/05/classloader-leaks-dreaded.html In short, it is solvable. Not easy, but solvable.

Upvotes: 1

Stephen C
Stephen C

Reputation: 718788

Unfortunately, the answers are:

  1. Yes
  2. Those VM options will only postpone the problem.

The basic problem is that the GC will not garbage collect a strongly reachable object. You need to figure out why those old application class loaders are still reachable after a redeploy ... and fix the leak.

Alternatively, give up on hot redeployment on your production servers, or restart the web container (e.g. JBoss) more often.

Upvotes: 7

Related Questions