Unlike heap space the perm-gen space (which holds class definitions, final vars, and interned Strings) doesn't get cleared out when you reload an application. So, every time you reload, you're adding a new set of class defs to the the perm-gen space.
Diagnosing a Tomcat that does not respond is tricky. The question you need to answer is this: "what are the threads doing, if they are not serving HTTP requests?" Here is some info to get you started with analysing thread dumps.
Thanks for the tips, I'll check these and see if I can find anything.
Joined: Apr 08, 2010
I did find something. When running jstack I had 40 HTTP threads that were all blocked on a synchronized method. However I could not find a race condition or similar that would explain it. I have rewritten the method to synchronize only the critical part of the code instead of the complete method, so I hope this helps.