You are viewing a plain text version of this content. The canonical link for it is here.
Posted to users@activemq.apache.org by ee7arh <an...@2e-systems.com> on 2009/06/11 16:52:29 UTC

Build up of Threads using Multicast Discovery Agent - eventually out of memory

Hi,

I have a problem that my application runs out of memory after a few days. I
ran jconsole against it and notice that the threads are building up and up.
In the "Threads" section of jconsole, I see that the vast majority of
Threads are "Multicast Discovery Agent Notifier" so I think the problem is
related to this.

My application uses ActiveMQ message broker and Camel router internally and
sends messages to other external message brokers which it discovers using
Multicast discovery.

Here is an extract of the Spring configuration file (the application is
launched from Spring)

<!-- ActiveMQ broker listening on port 61618 -->
    <broker:broker useJmx="false" persistent="true" brokerName="localhost">
    
        <broker:persistenceAdapter>
            <broker:amqPersistenceAdapter
directory="../../activemq-data-eventgen" maxFileLength="32mb"/>
        </broker:persistenceAdapter>

        <broker:transportConnectors>
            <broker:transportConnector name="tcp"
uri="tcp://localhost:61618"/>
        </broker:transportConnectors>
    </broker:broker>
    
    
    <!-- configure the Camel JMS consumer to use the ActiveMQ broker
declared above -->
    <bean id="jmsExternal"
class="org.apache.camel.component.jms.JmsComponent">
        <property name="connectionFactory">
            <bean class="org.apache.activemq.ActiveMQConnectionFactory">
                <!-- use multicast to detect other broker - group=groupName
of network to look for -->
                <property name="brokerURL"
value="discovery:(multicast://default?group=testbroker)?initialReconnectDelay=100"/>
            </bean>
        </property>
    </bean>

To send a message to the external queue "jmsExternal" I call the method in
POJO object:

camelTemplate.sendBody(x,y);

Only thing I noticed in the logs is that every time my application wants to
send a message, it seems to rediscover the brokers each time and prints them
out in the logs however I have no idea on the internal working of multicast
discovery so that could be completely normal.

I am using activeMQ 5.2.0 but the brokers which are being discovered are
using the FUSE 5.3 version.

If select one of the thousands of Multicast threads displayed in Jconsole,
they all have the same stack trace as this:

Name: Multicast Discovery Agent Notifier
State: WAITING on
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@1ce7f98
Total blocked: 0  Total waited: 1

Stack trace:
sun.misc.Unsafe.park(Native Method)
java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1925)
java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:358)
java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
java.lang.Thread.run(Thread.java:619)


Help appreciated.

BRegards
Andrew
-- 
View this message in context: http://www.nabble.com/Build-up-of-Threads-using-Multicast-Discovery-Agent---eventually-out-of-memory-tp23982888p23982888.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.


Re: Build up of Threads using Multicast Discovery Agent - eventually out of memory

Posted by ee7arh <an...@2e-systems.com>.
Hi Gary,

The issue already contains a test case to re-produce. Like the reporter I am
also using multicast discover in it's simplest form and the problem occurs
so I would guess this is a general problem for multicast discovery.

BRegards
Andrew


Gary Tully wrote:
> 
> this seems to be an incarnation of issue:
> https://issues.apache.org/activemq/browse/AMQ-2283
> If you can  add some detail and a simple test case to that issue it would
> be
> a great help.
> and vote for it also.
> 
> 2009/6/11 ee7arh <an...@2e-systems.com>
> 
>>
>> Hi,
>>
>> I have a problem that my application runs out of memory after a few days.
>> I
>> ran jconsole against it and notice that the threads are building up and
>> up.
>> In the "Threads" section of jconsole, I see that the vast majority of
>> Threads are "Multicast Discovery Agent Notifier" so I think the problem
>> is
>> related to this.
>>
>> My application uses ActiveMQ message broker and Camel router internally
>> and
>> sends messages to other external message brokers which it discovers using
>> Multicast discovery.
>>
>> Here is an extract of the Spring configuration file (the application is
>> launched from Spring)
>>
>> <!-- ActiveMQ broker listening on port 61618 -->
>>    <broker:broker useJmx="false" persistent="true"
>> brokerName="localhost">
>>
>>        <broker:persistenceAdapter>
>>            <broker:amqPersistenceAdapter
>> directory="../../activemq-data-eventgen" maxFileLength="32mb"/>
>>        </broker:persistenceAdapter>
>>
>>        <broker:transportConnectors>
>>            <broker:transportConnector name="tcp"
>> uri="tcp://localhost:61618"/>
>>        </broker:transportConnectors>
>>    </broker:broker>
>>
>>
>>    <!-- configure the Camel JMS consumer to use the ActiveMQ broker
>> declared above -->
>>    <bean id="jmsExternal"
>> class="org.apache.camel.component.jms.JmsComponent">
>>        <property name="connectionFactory">
>>            <bean class="org.apache.activemq.ActiveMQConnectionFactory">
>>                <!-- use multicast to detect other broker -
>> group=groupName
>> of network to look for -->
>>                <property name="brokerURL"
>>
>> value="discovery:(multicast://default?group=testbroker)?initialReconnectDelay=100"/>
>>            </bean>
>>        </property>
>>    </bean>
>>
>> To send a message to the external queue "jmsExternal" I call the method
>> in
>> POJO object:
>>
>> camelTemplate.sendBody(x,y);
>>
>> Only thing I noticed in the logs is that every time my application wants
>> to
>> send a message, it seems to rediscover the brokers each time and prints
>> them
>> out in the logs however I have no idea on the internal working of
>> multicast
>> discovery so that could be completely normal.
>>
>> I am using activeMQ 5.2.0 but the brokers which are being discovered are
>> using the FUSE 5.3 version.
>>
>> If select one of the thousands of Multicast threads displayed in
>> Jconsole,
>> they all have the same stack trace as this:
>>
>> Name: Multicast Discovery Agent Notifier
>> State: WAITING on
>>
>> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@1ce7f98
>> Total blocked: 0  Total waited: 1
>>
>> Stack trace:
>> sun.misc.Unsafe.park(Native Method)
>> java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
>>
>> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1925)
>> java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:358)
>>
>> java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
>>
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
>> java.lang.Thread.run(Thread.java:619)
>>
>>
>> Help appreciated.
>>
>> BRegards
>> Andrew
>> --
>> View this message in context:
>> http://www.nabble.com/Build-up-of-Threads-using-Multicast-Discovery-Agent---eventually-out-of-memory-tp23982888p23982888.html
>> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>>
>>
> 
> 
> -- 
> http://blog.garytully.com
> 
> Open Source Integration
> http://fusesource.com
> 
> 

-- 
View this message in context: http://www.nabble.com/Build-up-of-Threads-using-Multicast-Discovery-Agent---eventually-out-of-memory-tp23982888p24070306.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.


Re: Build up of Threads using Multicast Discovery Agent - eventually out of memory

Posted by ee7arh <an...@2e-systems.com>.
Hi Gary,

Thanks for the info, I added this info into the ticket.

I will look at creating a test case for this.

BRegards
Andrew


Gary Tully wrote:
> 
> this seems to be an incarnation of issue:
> https://issues.apache.org/activemq/browse/AMQ-2283
> If you can  add some detail and a simple test case to that issue it would
> be
> a great help.
> and vote for it also.
> 
> 2009/6/11 ee7arh <an...@2e-systems.com>
> 
>>
>> Hi,
>>
>> I have a problem that my application runs out of memory after a few days.
>> I
>> ran jconsole against it and notice that the threads are building up and
>> up.
>> In the "Threads" section of jconsole, I see that the vast majority of
>> Threads are "Multicast Discovery Agent Notifier" so I think the problem
>> is
>> related to this.
>>
>> My application uses ActiveMQ message broker and Camel router internally
>> and
>> sends messages to other external message brokers which it discovers using
>> Multicast discovery.
>>
>> Here is an extract of the Spring configuration file (the application is
>> launched from Spring)
>>
>> <!-- ActiveMQ broker listening on port 61618 -->
>>    <broker:broker useJmx="false" persistent="true"
>> brokerName="localhost">
>>
>>        <broker:persistenceAdapter>
>>            <broker:amqPersistenceAdapter
>> directory="../../activemq-data-eventgen" maxFileLength="32mb"/>
>>        </broker:persistenceAdapter>
>>
>>        <broker:transportConnectors>
>>            <broker:transportConnector name="tcp"
>> uri="tcp://localhost:61618"/>
>>        </broker:transportConnectors>
>>    </broker:broker>
>>
>>
>>    <!-- configure the Camel JMS consumer to use the ActiveMQ broker
>> declared above -->
>>    <bean id="jmsExternal"
>> class="org.apache.camel.component.jms.JmsComponent">
>>        <property name="connectionFactory">
>>            <bean class="org.apache.activemq.ActiveMQConnectionFactory">
>>                <!-- use multicast to detect other broker -
>> group=groupName
>> of network to look for -->
>>                <property name="brokerURL"
>>
>> value="discovery:(multicast://default?group=testbroker)?initialReconnectDelay=100"/>
>>            </bean>
>>        </property>
>>    </bean>
>>
>> To send a message to the external queue "jmsExternal" I call the method
>> in
>> POJO object:
>>
>> camelTemplate.sendBody(x,y);
>>
>> Only thing I noticed in the logs is that every time my application wants
>> to
>> send a message, it seems to rediscover the brokers each time and prints
>> them
>> out in the logs however I have no idea on the internal working of
>> multicast
>> discovery so that could be completely normal.
>>
>> I am using activeMQ 5.2.0 but the brokers which are being discovered are
>> using the FUSE 5.3 version.
>>
>> If select one of the thousands of Multicast threads displayed in
>> Jconsole,
>> they all have the same stack trace as this:
>>
>> Name: Multicast Discovery Agent Notifier
>> State: WAITING on
>>
>> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@1ce7f98
>> Total blocked: 0  Total waited: 1
>>
>> Stack trace:
>> sun.misc.Unsafe.park(Native Method)
>> java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
>>
>> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1925)
>> java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:358)
>>
>> java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
>>
>> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
>> java.lang.Thread.run(Thread.java:619)
>>
>>
>> Help appreciated.
>>
>> BRegards
>> Andrew
>> --
>> View this message in context:
>> http://www.nabble.com/Build-up-of-Threads-using-Multicast-Discovery-Agent---eventually-out-of-memory-tp23982888p23982888.html
>> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>>
>>
> 
> 
> -- 
> http://blog.garytully.com
> 
> Open Source Integration
> http://fusesource.com
> 
> 

-- 
View this message in context: http://www.nabble.com/Build-up-of-Threads-using-Multicast-Discovery-Agent---eventually-out-of-memory-tp23982888p23997896.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.


Re: Build up of Threads using Multicast Discovery Agent - eventually out of memory

Posted by Gary Tully <ga...@gmail.com>.
this seems to be an incarnation of issue:
https://issues.apache.org/activemq/browse/AMQ-2283
If you can  add some detail and a simple test case to that issue it would be
a great help.
and vote for it also.

2009/6/11 ee7arh <an...@2e-systems.com>

>
> Hi,
>
> I have a problem that my application runs out of memory after a few days. I
> ran jconsole against it and notice that the threads are building up and up.
> In the "Threads" section of jconsole, I see that the vast majority of
> Threads are "Multicast Discovery Agent Notifier" so I think the problem is
> related to this.
>
> My application uses ActiveMQ message broker and Camel router internally and
> sends messages to other external message brokers which it discovers using
> Multicast discovery.
>
> Here is an extract of the Spring configuration file (the application is
> launched from Spring)
>
> <!-- ActiveMQ broker listening on port 61618 -->
>    <broker:broker useJmx="false" persistent="true" brokerName="localhost">
>
>        <broker:persistenceAdapter>
>            <broker:amqPersistenceAdapter
> directory="../../activemq-data-eventgen" maxFileLength="32mb"/>
>        </broker:persistenceAdapter>
>
>        <broker:transportConnectors>
>            <broker:transportConnector name="tcp"
> uri="tcp://localhost:61618"/>
>        </broker:transportConnectors>
>    </broker:broker>
>
>
>    <!-- configure the Camel JMS consumer to use the ActiveMQ broker
> declared above -->
>    <bean id="jmsExternal"
> class="org.apache.camel.component.jms.JmsComponent">
>        <property name="connectionFactory">
>            <bean class="org.apache.activemq.ActiveMQConnectionFactory">
>                <!-- use multicast to detect other broker - group=groupName
> of network to look for -->
>                <property name="brokerURL"
>
> value="discovery:(multicast://default?group=testbroker)?initialReconnectDelay=100"/>
>            </bean>
>        </property>
>    </bean>
>
> To send a message to the external queue "jmsExternal" I call the method in
> POJO object:
>
> camelTemplate.sendBody(x,y);
>
> Only thing I noticed in the logs is that every time my application wants to
> send a message, it seems to rediscover the brokers each time and prints
> them
> out in the logs however I have no idea on the internal working of multicast
> discovery so that could be completely normal.
>
> I am using activeMQ 5.2.0 but the brokers which are being discovered are
> using the FUSE 5.3 version.
>
> If select one of the thousands of Multicast threads displayed in Jconsole,
> they all have the same stack trace as this:
>
> Name: Multicast Discovery Agent Notifier
> State: WAITING on
>
> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject@1ce7f98
> Total blocked: 0  Total waited: 1
>
> Stack trace:
> sun.misc.Unsafe.park(Native Method)
> java.util.concurrent.locks.LockSupport.park(LockSupport.java:158)
>
> java.util.concurrent.locks.AbstractQueuedSynchronizer$ConditionObject.await(AbstractQueuedSynchronizer.java:1925)
> java.util.concurrent.LinkedBlockingQueue.take(LinkedBlockingQueue.java:358)
>
> java.util.concurrent.ThreadPoolExecutor.getTask(ThreadPoolExecutor.java:947)
>
> java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:907)
> java.lang.Thread.run(Thread.java:619)
>
>
> Help appreciated.
>
> BRegards
> Andrew
> --
> View this message in context:
> http://www.nabble.com/Build-up-of-Threads-using-Multicast-Discovery-Agent---eventually-out-of-memory-tp23982888p23982888.html
> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>
>


-- 
http://blog.garytully.com

Open Source Integration
http://fusesource.com