Memory leak when creating large numbers of TemporaryQueues (Log4J related)
--------------------------------------------------------------------------

                 Key: AMQ-1681
                 URL: https://issues.apache.org/activemq/browse/AMQ-1681
             Project: ActiveMQ
          Issue Type: Bug
          Components: Broker
    Affects Versions: 5.0.0
         Environment: Embedded broker using Log4J
            Reporter: Gregory Mostizky


When using an embedded broker and using Log4J, there is a memory leak in the 
broker for each new TemporaryQueue created.

This seems to be the offending code (taken from 5.0.0-release source):

org.apache.activemq.broker.region.Queue:

    public Queue(Broker broker, ActiveMQDestination destination, final 
SystemUsage systemUsage, MessageStore store, DestinationStatistics parentStats,
                 TaskRunnerFactory taskFactory, Store tmpStore) throws 
Exception {

        ... skipped....

        // let's copy the enabled property from the parent DestinationStatistics
        this.destinationStatistics.setEnabled(parentStats.isEnabled());
        destinationStatistics.setParent(parentStats);
        this.log = LogFactory.getLog(getClass().getName() + "." + 
destination.getPhysicalName());
    }

What happens here is that for each new TemporaryQueue created a new log 
instance is created with rather large string as it's name.
This instance is unique for each new TemoraryQueue and because of the way Log4J 
handles those instances, it is never removed once initalized.

We hit this bug when we were testing performance together with Spring-based 
synchronous JMS API, which is implemented in such a way that 
for each new message it creates a new TemporaryQueue. We got OutOfMemory after 
about 40000 messages with 128M heap.

I am not sure what this special log instance is used for, but assuming it's not 
very important, it will be easy to fix this bug with just using some predefined 
log name always.

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

Reply via email to