I created ticket https://issues.apache.org/jira/browse/SHINDIG-1439
for the shutdown hook.

I read a little bit more about thread locals, and I think that caching
the DocumentBuilder in a ThreadLocal should not create a memory leak.
See this blog post:
http://blog.crazybob.org/2006/07/hard-core-java-threadlocal.html (I
think I understand why
https://issues.apache.org/jira/browse/SHINDIG-1132 is fixed).

Should I open a jira issue for the guava thing?

On Mon, Oct 4, 2010 at 4:23 AM, Paul Lindner <lind...@inuus.com> wrote:
> Can you open a jira issue with this information so that it doesn't get
> forgotten.  I'd like to see a solution, just don't have the time to
> tackle it myself at the moment.
>
>
> 2010/9/23 Pablo Graña <pablo.gr...@globant.com>:
>> Here is more info on the problem and the current status:
>>
>> http://code.google.com/p/guava-libraries/issues/detail?id=92
>>
>> Guys from guice copied the classes from guava (or google-collections),
>> bringing the same problem to guice.
>>
>> The memory leaks manifests with hot redeploys in tomcat, after a couple of
>> which you get a perm gen memory error. The only safe thing to do is to
>> restart tomcat for every deploy.
>>
>> The problem is that for each web application, tomcat creates a class loader.
>> When you redeploy the same application, tomcat creates a new class loader
>> and removes the references it holds to the old class loader. But in some
>> cases, there could be some reference from, for example, the system class
>> loader to the old web app class loader, stopping the garbage collector from
>> reclaiming the memory. A classic example is when you package the database
>> driver in WEB-INF/lib in your webapp: the driver manager (in the system
>> class loader) will hold a reference to a class in the webapp classloader.
>>
>> The same happens with shutdown hooks: you have a system class loader
>> (Runtime) that holds a reference to the shutdown thread, keeping the webapp
>> classloader always alive.
>>
>> Anyway, a shutdown hook will only cleanup resources when the jvm ends. And
>> you probably want the cleanup to happen when the web application is
>> undeployed.
>>
>> That is why I think the best option is to use a context loader listener: add
>> a shutdown operation to DefaultGuiceModule and call it in from
>> GuiceServletContextListener.contextDestroyed.
>>
>> BTW: I found another problem. XmlUtil is caching a DocumentBuilder in a
>> ThreadLocal, and never released. This also keeps the web app classloader
>> alive.
>>
>> Thanks
>>
>> On Thu, Sep 23, 2010 at 11:18 PM, Gagandeep singh 
>> <gagan.g...@gmail.com>wrote:
>>
>>> Hi Pablo
>>>
>>> I couldn't understand the memory leak you found in Guice. Hopefully crazy
>>> bob will fix it soon (it has been 3 months already).
>>> As for the shindig shutdown hook, it looks like an innocent hook which
>>> tries
>>> to stop the executor service which is where all the threads are scheduled.
>>> Did you find any particular instance in which it creates a memory leak ?
>>> Also, please explain a bit more on your ContextLoaderListener idea.
>>>
>>> Thanks
>>> Gagan
>>>
>>> 2010/9/22 Pablo Graña <pablo.gr...@globant.com>
>>>
>>> > Hi guys.
>>> >
>>> > I get an oom after some hot deploys. I traced one problem to Guice (
>>> > http://www.mail-archive.com/google-gu...@googlegroups.com/msg02987.html-
>>> > there is a workaround) and another to shindig: the DefaultGuiceModule
>>> > installs a shutdown hook, apparently with the idea to shut down a thread
>>> > pool. Is this hook correct? It should probably go in a
>>> > ContextLoaderListener, right?
>>> >
>>> > thanks a lot.
>>> >
>>> > --
>>> > Pablo Gra\~na
>>> > Chief Architect
>>> > Globant
>>> > Arg Office: +54 (11) 4109 1743
>>> > UK  Office: +44 (20) 7043 8269 int 8043
>>> > US  Office: +1 (212) 400 7686 int 8043
>>> >
>>>
>>
>>
>>
>> --
>> Pablo Gra\~na
>> Chief Architect
>> Globant
>> Arg Office: +54 (11) 4109 1743
>> UK  Office: +44 (20) 7043 8269 int 8043
>> US  Office: +1 (212) 400 7686 int 8043
>>
>
>
>
> --
> Paul Lindner -- lind...@inuus.com -- linkedin.com/in/plindner
>



-- 
Pablo Gra\~na
Chief Architect
Globant
Arg Office: +54 (11) 4109 1743
UK  Office: +44 (20) 7043 8269 int 8043
US  Office: +1 (212) 400 7686 int 8043

Reply via email to