Looks like a definite ClassLoader problem...
1) I'm running under Glassfish v3 prelude 28c which I believe is the
latest version.
2) I verified that warp-servlet is clearing its references.
3) The heap dump lists the same class name multiple times. It took me a
while to figure out this occurs once for every time I redeploy the
webapp. This is even more confusing because in each ClassLoader the
object is listed with the same object id (i.e. object #1) but it isn't
the same object. So for example I see the same class name listed 5 times
but only one row displays 8 live instances, all others show 0.
4) Some objects show leaks. The same class shows up multiple times and
they all have non-zero instance counts.
5) I see Guice's Finalizer never shuts down. It keeps on creating new
instances and the old threads never shut down.
How do I find out what is keeping the finalizer alive? If you can point
me to the right object I will try walking the heap graph to see what is
keeping it alive.
Thanks,
Gili
Stuart McCulloch wrote:
> 2008/11/27 Gili Tzabari <[EMAIL PROTECTED]
> <mailto:[EMAIL PROTECTED]>>
>
>
> Stuart McCulloch wrote:
> > can you be a bit more clearer about the link from the Finalizer
> thread
> > to the Tomcat classes? are you loading Guice as a separate bundle
> > or elsewhere in the hierarchy, like inside a Tomcat classloader?
>
> Not as far as I know. I am just using Guice as a library
> inside my
> webapp. I'm not sure whether "bundle" means something different than a
> library in this context.
>
>
> bundle is an OSGi term - since you're using GFv2 you're probably using a
> Tomcat classloader
>
>
> > here's how things worked for me - I loaded Guice in Felix as an OSGi
> > bundle, so the Finalizer thread (which gets its own classloader) was
> > in a classloader chained off the Guice bundle classloader
>
> What is the "Guice bundle classloader"?
>
>
> in OSGi each bundle gets its own classloader - but for you this would be
> the webapp classloader
>
> @Inject @Pitch
> with OSGi instead of having large monolithic webapps, you can break them
> into several bundles
> and then re-use bundles between applications (bundles are versioned, so
> you can have several
> versions of say Xerces safely loaded at the same time) - OSGi manages
> the wiring for you
>
> that's the idea at least - of course you may hit a few speed-bumps when
> moving legacy code to
> the OSGi model, but there are several Enterprise platforms coming out to
> help with this, like GF.
>
> here's an ongoing case study about moving to OSGi:
>
> http://raibledesigns.com/rd/entry/building_linkedin_s_next_generation
>
> http://www.slideshare.net/linkedin/building-linkedins-next-generation-architecture-with-osgi-presentation
> http://blog.linkedin.com/?s=osgi
>
> they decided to use Spring-DM (which is Spring's OSGi support) but don't
> hold that against them ;)
>
> > the Finalizer thread hangs around until it detects that the
> classloader
> > with the reference queue (in this case the Guice bundle) is
> eligible for
> > GC, so until this happens you will see it appear as a GC root
> >
> > what might be happening in your case is that something else is
> keeping
> > the Guice classloader alive, in which case the Finalizer thread
> will stay
> > alive (but it won't cause a memory leak, because it shuts down
> when it
> > spots certain key classes being enqueued - as mentioned earlier)
>
> I suspect warp-servlet is the culprit.
>
>
> yes, I'd suggest tracing warp-servlet first to make sure the injector is
> cleared
>
> btw, the unofficial patches that I applied to Guice can be found in my
> earlier note
> ( if it's really necessary I could make the patched source available
> somewhere )
>
>
> > once the Guice classloader is eligible for GC, the Finalizer
> thread will
> > detect it and shutdown, allowing both classloaders to be unloaded...
> >
> > [ ps. you might also want to look at GlassFish v3 prelude ]
>
> I'm downloading it now. Is this a reasonable version?
> https://glassfish.dev.java.net/downloads/v3-prelude.html or are you
> using nightly builds from somewhere else?
>
>
> for my test I used a plain OSGi container as I wasn't using JEE - but
> the v3 prelude should be ok
>
> Gili
>
>
> --
> Cheers, Stuart
>
> >
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups
"google-guice" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to [EMAIL PROTECTED]
For more options, visit this group at
http://groups.google.com/group/google-guice?hl=en
-~----------~----~----~----~------~----~------~--~---