I debugged into this a bit further. It looks like if you have a web.xml with a version >= 3.0 Tomcat scans the jars in the webapp for web.xml fragments, and by default also scans the classpath, causing it to pick up OpenEJB and all its associated jars. I've made a change to intercept the configure_start lifecycle event, and turn classpath scanning off, so it just scans the jars in the webapp to see if that makes any difference. It's building at the moment, so I'll give it a test and report back how it goes.
Jon On Wed, Mar 30, 2011 at 11:57 PM, Jonathan Gallimore < [email protected]> wrote: > On Wed, Mar 30, 2011 at 9:34 PM, David Blevins <[email protected]>wrote: > >> >> On Mar 30, 2011, at 6:14 AM, Jonathan Gallimore wrote: >> >> > Hi all, >> > >> > I just thought I'd post to see whether any one had any views about our >> > PermGen space usage. I've noticed that when running TomEE from a recent >> > snapshot, when nothing but the basic openejb webapp is running, our >> PermGen >> > usage sits at around 37MB. If I deploy our moviefun example (which now >> > features JPA 2, JSF 2, EJBs, Webservices, JMS etc etc) that increased to >> > 140MB - well over the 64MB that the Sun/Oracle JVMs set as a default >> > maximum. The class counts are 5618 and 23496 respectively. I've profiled >> > this with the YourKit Java Profiler (thanks for the free license if >> you're >> > reading!) and I can't see anything out of the ordinary - it looks like >> its >> > all down to the number of classes being loaded. I can't spot any obvious >> > duplication or class loader leakage. Heap wise, everything looks ok - >> usage >> > on this instance was around the 25MB mark. >> > >> > 100 MiB = 102400 KiB, which divided by 17878 extra classes works out at >> 5.7 >> > KiB per class on average, which sounds reasonable to me, I guess. I've >> > uploaded a list of all the classes that are loaded between TomEE >> starting >> > and moviefun being fully deployed here: >> > http://people.apache.org/~jgallimore/loaded_classes.txt. One thing that >> is >> > interesting is the system class loader had 19357 classes loaded, and >> 17973 >> > classes without instances. Prior to deploying moviefun, the numbers are >> 3406 >> > classes, and 2181 without instances - anyone know if there's anything >> > significant in those numbers? >> > >> > Does anyone have any thoughts on this? I don't necessarily have any >> problem >> > with increasing PermGen on my own installations or recommending others >> do >> > the same, but also feel it would be nice to offer as much as possible >> > without requiring users to allocate more memory. I'd be interested in >> > hearing anyone else's experiences with this. >> >> Would be cool to get a before/after moviefun list so we could do some >> comparisons. > > > That file on people.apache.org is a log using -class:verbose which I > started after letting TomEE start up, and then I dropped the moviefun.war in > - so it should show the 15000 or so added classes. I've also done a log for > all the classes TomEE loads right from the start without deploying any extra > apps, and a log from the start for all the classes with moviefun deployed. I > can't seem to get these onto people.apache.org at the moment, but they're > available from http://home.jrg.me.uk/~jgallimore > > >> The system class increase as you point out is very odd. This might be >> releated to OWB. I thought I cut that part out, but OWB will try to load >> *every* class it can find. As I said, I thought I cut that out, but maybe >> it's getting invoked. I'm not sure where that code is anymore, but grep in >> OWB for calls to loadClass or Class.forName. Think it might be in their >> Scanner implementation. >> > > I haven't had a look at that yet, but I'll have a quick scan through the > OWB code next and report back with any findings. Thanks for the pointer! > > >> >> Does look like there might be some low hanging fruit. Seems we are >> falsely including the tomcat libs in our libs and they are getting loaded: >> >> [Loaded org.apache.catalina.mbeans.ServerLifecycleListener from >> file:/Users/jon/demo/apache-tomee-tomcat-7.0.11/webapps/openejb/lib/tomcat-catalina-7.0.8.jar] >> [Loaded org.apache.naming.NamingServiceMBean from >> file:/Users/jon/demo/apache-tomee-tomcat-7.0.11/webapps/openejb/lib/tomcat-catalina-7.0.8.jar] >> [Loaded org.apache.naming.NamingService from >> file:/Users/jon/demo/apache-tomee-tomcat-7.0.11/webapps/openejb/lib/tomcat-catalina-7.0.8.jar] >> >> We should trim the contents of our lib/ dir down and see how things look. >> > > Whoops! We should definitely remove that. > > >> >> Thanks for looking at this BTW! >> > > No problem - I've enjoyed it, and I've learned a lot too! > > Jon >
