activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From SledgeHammer <gro...@firstam.com>
Subject Memory leak??
Date Fri, 26 Apr 2013 23:32:59 GMT
Basic issue is that on first run, everything works perfectly... on 2nd run,
the consumer hangs responding to the producer (producer created temp queue).
NOTE: I kill the producer in the middle to test recovery...

Will give you a brief summary at first so I don't overload you with info
lol...

* OS: Windows 7 64bit
* ActiveMQ: 5.8.0
* Broker is pretty stock. I have changed the port #. I have enabled GC of
inactive queues. My queue XML tag is:

<policyEntry queue=">" producerFlowControl="false"
gcInactiveDestinations="true" inactiveTimoutBeforeGC="5000">

*1 broker, 1 producer & 1 consumer at this time. All 3 components are
running on the same windows 7 machine

* messages are byte messages, typically 1MB to 2MB, message takes client
approx. 8 seconds to process.

* As discussed in a previous thread, my boss wanted a round-robin type
implementation so all producers could get messages handled in a reasonable
time. You guys recommended each producer create its own queue and I
round-robin on those...

Flow on the consumer side is:

1) Basic abbreviated start up:

Uri connectUri = new
Uri(String.Format("activemq:tcp://{0}:{1}?wireFormat.tightEncodingEnabled=true&nms.PrefetchPolicy.QueuePrefetch=1",
_strServer, _nPort));

server is localhost, port = 25055

IDestination destination = SessionUtil.GetTopic(session,
"ActiveMQ.Advisory.Queue");

using (IMessageConsumer consumer = session.CreateConsumer(destination))
{
// use listener version
// wait on handle forever
}

2) in the advisory listener, the basic flow is:

if (destInfo.IsAddOperation)
{
create consumer for new queue
create consumer for queue producer notifications
}
else
{
unsub both consumers
close both consumers
dispose both consumers
}

3) in the producer advisory listener, the basic flow is:

if its a remove info, I unsub both consumers, close them and dispose them

then I do a _session.DeleteQueue();

this all works properly to detect a brute force close on the producer and
the queue is deleted as expected. If I run the producer again, the consumer
gets a new advisory that a new queue has been created and it subs the 2
consumers, etc.

When it goes to reply to the producer via the temp queue the producer
created, producer.Send() "hangs"... in the log I get:

INFO   | jvm 1    | 2013/04/26 16:14:34 |  INFO | Usage Manager Memory Limit
(67108864) reached on
temp-queue://ID:xxxQ24-046485-49115-635025896442413777-1:0:1. Producers will
be throttled to the rate at which messages are removed from this destination
to prevent flooding it. See
http://activemq.apache.org/producer-flow-control.html for more info

this queue is empty at this time and the machine has 8GB of RAM... not sure
whats going on... as stated above... flow control is OFF.




--
View this message in context: http://activemq.2283324.n4.nabble.com/Memory-leak-tp4666300.html
Sent from the ActiveMQ - User mailing list archive at Nabble.com.

Mime
View raw message