Hi Can you post how you have configured AMQ and Camel? And have you tried with AMQ 5.5.1 and Camel 2.8.2 ?
On Fri, Nov 4, 2011 at 8:04 PM, Sergey C.(Vancouver) <[email protected]> wrote: > Hello Camel & ActiveMQ uses and developers! > > Here is our test setup and memory leak description. > > > Using: > -------- > Spring Framework 3.0.5.RELEASE > ActiveMQ 5.4.3 > Camel 2.7.3 > > > Test setup: > --------------- > > There are 3 actors in our test: > * ActiveMQ broker > * Client process > * Server process > > Client interacts with server using InOut pattern and static reply-to queue. > > Endpoint on the client side > uri="jms:queue:Executor?deliveryPersistent=false&requestTimeout=3000&replyTo=Executor.Reply" > Endpoint on the server side > uri="jms:queue:Executor?&replyToDeliveryPersistent=false" > > How memory leak occurs: > ====================== > > In this scenario Camel uses 'PersistentQueueReplyManager' to receive replies > from the server process. > Specifically it uses inner class 'PersistentQueueMessageListenerContainer' > which is a child of 'DefaultMessageListenerContainer'. > Factory method 'createListenerContainer()' in line 159 creates this inner > class with cache level 'DefaultMessageListenerContainer.CACHE_SESSION' in > line 193. > > So, method 'doReceiveAndExecute' in AbstractPollingMessageListenerContainer, > line 277 > creates ActiveMQMessageConsumer on each invocation ( > AbstractPollingMessageListenerContainer, line 277 ) > When consumer object is created PersistentQueueMessageListenerContainer has > a reference to 'PolledSession', > it calls method createConsumer in PooledSession, line 235. > Object ActiveMQSession is wrapped inside PooledSession whic holds a list of > created consumers. > As a result reference to consumer object is stored inside both > 'PooledSession' and inner session 'ActiveMQSession' > > Memory leak occurs when method 'doReceiveAndExecute' closes consumer in the > finally section > with JmsUtils.closeMessageConsumer(consumerToClose) in > AbstractPollingMessageListenerContainer, line 365. > ActiveMQMessageConsumer has a reference to ActiveMQSession object and > detaches from it by calling > this.session.removeConsumer(this); in line 775 > But 'this.session' is a reference to ActiveMQSession object which is 'inner > session' in this PooledSession wrapper. > 'PooledSession' keeps holding references to all created > ActiveMQMessageConsumer objects. > > In our test setup client with 512K heap chokes after ~200'000 > request/replies. > > Workaround (for this scenario only): > ================================ > * comment line 323 in PooledSession ( //consumers.add(consumer); ) > * recompile 'activemq-poll' module > * install it into your local Maven repository > * enjoy millions of request/replies without memory leak > > > Please advice! > > Sergey C. > > > > -- > View this message in context: > http://camel.465427.n5.nabble.com/Possible-memory-leak-in-org-apache-activemq-pool-PooledSession-tp4964951p4964951.html > Sent from the Camel - Users mailing list archive at Nabble.com. > -- Claus Ibsen ----------------- FuseSource Email: [email protected] Web: http://fusesource.com Twitter: davsclaus, fusenews Blog: http://davsclaus.blogspot.com/ Author of Camel in Action: http://www.manning.com/ibsen/
