You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by "Daniel Spilker (JIRA)" <ji...@apache.org> on 2010/07/28 18:02:51 UTC

[jira] Created: (AMQ-2852) Memory leak when undeploying webapp with ActiveMQ client

Memory leak when undeploying webapp with ActiveMQ client
--------------------------------------------------------

                 Key: AMQ-2852
                 URL: https://issues.apache.org/activemq/browse/AMQ-2852
             Project: ActiveMQ
          Issue Type: Bug
          Components: Transport
    Affects Versions: 5.3.2
            Reporter: Daniel Spilker


I have a web app with an ActiveMQ client. When undeploying the app, Tomcat logs the following messages.

{code}
28.07.2010 17:44:28 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SCHWERWIEGEND: The web application [] appears to have started a thread named [InactivityMonitor Async Task: java.util.concurrent.ThreadPoolExecutor$Worker@c821ef] but has failed to stop it. This is very likely to create a memory leak. 
28.07.2010 17:44:28 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
SCHWERWIEGEND: The web application [] appears to have started a thread named [TcpSocketClose: java.util.concurrent.ThreadPoolExecutor$Worker@19ac2e3] but has failed to stop it. This is very likely to create a memory leak. 
{code}

Searching for "InactivityMonitor Async Task" and "TcpSocketClose", I found org.apache.activemq.transport.tcp.TcpTransport and org.apache.activemq.transport.InactivityMonitor which both start a ThreadPoolExecutor in their static intializers but never stop them. The ThreadPoolExecutors hold references to ActiveMQ classes which hold a reference to the webapp classloader. These references prevent the webapp classes from being unloaded when the webapp is undeployed. Due to this the servlet container runs out of memory after a few redeployments.

The ActiveMQ client should dispose all resources when being closed, including the ThreadPoolExecutors. Or to provide some methods to explicitly stop these Threads (like org.apache.activemq.thread.Scheduler.shutdown() does).

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


[jira] Commented: (AMQ-2852) Memory leak when undeploying webapp with ActiveMQ client

Posted by "Julien HENRY (JIRA)" <ji...@apache.org>.
    [ https://issues.apache.org/activemq/browse/AMQ-2852?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=62030#action_62030 ] 

Julien HENRY commented on AMQ-2852:
-----------------------------------

I still have this issue with ActiveMQ 5.4.1.

> Memory leak when undeploying webapp with ActiveMQ client
> --------------------------------------------------------
>
>                 Key: AMQ-2852
>                 URL: https://issues.apache.org/activemq/browse/AMQ-2852
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Transport
>    Affects Versions: 5.3.2
>            Reporter: Daniel Spilker
>
> I have a web app with an ActiveMQ client. When undeploying the app, Tomcat logs the following messages.
> {code}
> 28.07.2010 17:44:28 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
> SCHWERWIEGEND: The web application [] appears to have started a thread named [InactivityMonitor Async Task: java.util.concurrent.ThreadPoolExecutor$Worker@c821ef] but has failed to stop it. This is very likely to create a memory leak. 
> 28.07.2010 17:44:28 org.apache.catalina.loader.WebappClassLoader clearReferencesThreads
> SCHWERWIEGEND: The web application [] appears to have started a thread named [TcpSocketClose: java.util.concurrent.ThreadPoolExecutor$Worker@19ac2e3] but has failed to stop it. This is very likely to create a memory leak. 
> {code}
> Searching for "InactivityMonitor Async Task" and "TcpSocketClose", I found org.apache.activemq.transport.tcp.TcpTransport and org.apache.activemq.transport.InactivityMonitor which both start a ThreadPoolExecutor in their static intializers but never stop them. The ThreadPoolExecutors hold references to ActiveMQ classes which hold a reference to the webapp classloader. These references prevent the webapp classes from being unloaded when the webapp is undeployed. Due to this the servlet container runs out of memory after a few redeployments.
> The ActiveMQ client should dispose all resources when being closed, including the ThreadPoolExecutors. Or to provide some methods to explicitly stop these Threads (like org.apache.activemq.thread.Scheduler.shutdown() does).

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.