activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "ashwini kuntamukkala (JIRA)" <j...@apache.org>
Subject [jira] Updated: (AMQ-2918) ActiveMQMapMessage stay in memory causing leaks
Date Wed, 15 Sep 2010 14:11:40 GMT

     [ https://issues.apache.org/activemq/browse/AMQ-2918?page=com.atlassian.jira.plugin.system.issuetabpanels:all-tabpanel
]

ashwini kuntamukkala updated AMQ-2918:
--------------------------------------


Gary,

This is a very simple test. I created a Map<String,String> with large 8KB persistent
messages. 
I used ActiveMQ 5.4.0 broker. I use JMSTemplate to send messages to a queue. (I have used
VM/TCP transports). Important thing to note is that there is no consumer associated with the
queue. So, messages are flooding the queue at a fast rate. (only producer)
(This is like a DLQ where messages are flooding into because of consistent error by consumer
causing session rollback. Here no consumer dequeues messages from DLQ automatically. Its handled
manually)

The  following shows destination policy and system  memory configuration.


 <destinationPolicy>
            <policyMap>
              <policyEntries>
                <policyEntry topic=">" producerFlowControl="false" >
                  <pendingSubscriberPolicy>
                    <vmCursor />
                  </pendingSubscriberPolicy>
                </policyEntry>
                
                <policyEntry queue=">" producerFlowControl="false">
                	
                	<deadLetterStrategy>
			        	<individualDeadLetterStrategy queuePrefix="DLQ." useQueueForQueueMessages="true"
/>
          			</deadLetterStrategy>
          			
                	<dispatchPolicy>
             		            <strictOrderDispatchPolicy />
           	        </dispatchPolicy>
           		
                  <pendingQueuePolicy>
                    <fileQueueCursor/>
                  </pendingQueuePolicy>
                  
                </policyEntry>
              </policyEntries>
            </policyMap>
        </destinationPolicy> 


       <systemUsage>
            <systemUsage  sendFailIfNoSpace="true">
                <memoryUsage>
                    <memoryUsage limit="256 mb"/>
                </memoryUsage>
                <storeUsage>
                    <storeUsage limit="1 gb"/>
                </storeUsage>
                <tempUsage>
                    <tempUsage limit="100 mb"/>
                </tempUsage>
            </systemUsage>
        </systemUsage>



> ActiveMQMapMessage stay in memory causing leaks
> -----------------------------------------------
>
>                 Key: AMQ-2918
>                 URL: https://issues.apache.org/activemq/browse/AMQ-2918
>             Project: ActiveMQ
>          Issue Type: Bug
>          Components: Broker
>    Affects Versions: 5.4.0
>         Environment: Windows XP
>            Reporter: ashwini kuntamukkala
>
> I am running embedded broker in a spring container. During a volume test, I forward messages
to a  dead letter queue. ActiveMQMapMessage that are being redirected to dead letter queue
stay in memory. So, if I forward 15000 messages to dead letter queue, all 15000 messages will
be in memory. These are persistent messages. 
> I want to have a smaller memory footprint. Why are the activemqmapmessages staying in
memory. the ones that were successfully processed get deleted just fine. 
> This is jmap -histo output
>   14:         19826        3647984  org.apache.activemq.command.ActiveMQMapMessage
>   28:         19791         791640  org.apache.activemq.command.ActiveMQQueue
> total of 19K+ activeMqMapMessages and  ActiveMQQueue instances...
> Since these are dead letter messages, why does ActiveMQ need to hold references to these
messages in memory??
> ----------------------------------
> I tried using the filequeuecursor: after a while the broker stopped responding because
of the following error. 
> org.apache.activemq.broker.TransportConnection.Service.serviceException() 294 : Async
error occurred: java.lang.RuntimeException: java.lang.NullPointerException
> java.lang.RuntimeException: java.lang.NullPointerException
> 	at org.apache.activemq.broker.region.cursors.FilePendingMessageCursor.tryAddMessageLast(FilePendingMessageCursor.java:228)
> 	at org.apache.activemq.broker.region.cursors.FilePendingMessageCursor.addMessageLast(FilePendingMessageCursor.java:192)
> 	at org.apache.activemq.broker.region.Queue.sendMessage(Queue.java:1601)
> 	at org.apache.activemq.broker.region.Queue.doMessageSend(Queue.java:707)
> 	at org.apache.activemq.broker.region.Queue.send(Queue.java:646)
> 	at org.apache.activemq.broker.region.AbstractRegion.send(AbstractRegion.java:365)
> 	at org.apache.activemq.broker.region.RegionBroker.send(RegionBroker.java:494)
> 	at org.apache.activemq.broker.BrokerFilter.send(BrokerFilter.java:129)
> 	at org.apache.activemq.broker.scheduler.SchedulerBroker.send(SchedulerBroker.java:136)
> 	at org.apache.activemq.broker.BrokerFilter.send(BrokerFilter.java:129)
> 	at org.apache.activemq.broker.CompositeDestinationBroker.send(CompositeDestinationBroker.java:96)
> 	at org.apache.activemq.broker.TransactionBroker.send(TransactionBroker.java:230)
> 	at org.apache.activemq.broker.MutableBrokerFilter.send(MutableBrokerFilter.java:135)
> 	at org.apache.activemq.broker.TransportConnection.processMessage(TransportConnection.java:460)
> 	at org.apache.activemq.command.ActiveMQMessage.visit(ActiveMQMessage.java:663)
> 	at org.apache.activemq.broker.TransportConnection.service(TransportConnection.java:309)
> 	at org.apache.activemq.broker.TransportConnection$1.onCommand(TransportConnection.java:185)
> 	at org.apache.activemq.transport.ResponseCorrelator.onCommand(ResponseCorrelator.java:116)
> 	at org.apache.activemq.transport.TransportFilter.onCommand(TransportFilter.java:69)
> 	at org.apache.activemq.transport.vm.VMTransport.iterate(VMTransport.java:218)
> 	at org.apache.activemq.thread.PooledTaskRunner.runTask(PooledTaskRunner.java:122)
> 	at org.apache.activemq.thread.PooledTaskRunner$1.run(PooledTaskRunner.java:43)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(Unknown Source)
> 	at java.util.concurrent.ThreadPoolExecutor$Worker.run(Unknown Source)
> 	at java.lang.Thread.run(Unknown Source)
> Caused by: java.lang.NullPointerException
> 	at org.apache.activemq.store.kahadb.plist.PList.addLast(PList.java:176)
> 	at org.apache.activemq.store.kahadb.plist.PList$2.execute(PList.java:163)
> 	at org.apache.kahadb.page.Transaction.execute(Transaction.java:728)
> 	at org.apache.activemq.store.kahadb.plist.PList.addLast(PList.java:161)
> 	at org.apache.activemq.broker.region.cursors.FilePendingMessageCursor.tryAddMessageLast(FilePendingMessageCursor.java:221)
> 	... 24 more

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


Mime
View raw message