[ 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.