Memory leak in broker - Temporary Queue related (fix proposal included)
-----------------------------------------------------------------------
Key: AMQ-1790
URL: https://issues.apache.org/activemq/browse/AMQ-1790
Project: ActiveMQ
Issue Type: Bug
Components: Broker
Affects Versions: 5.1.0
Environment: ActiveMQ broker 5.1
Spring based application with synchronous messages (temp queue based)
Reporter: Gregory Mostizky
Priority: Critical
ActiveMQ broker leaks memory when using temp queues.
This is critical for projects that use spring based synchronous messaging
because each message creates & destroys new temp queue,
however because of the leak they are not completely cleaned up resulting in
OutOfMemory exception.
First these are the classes that are leaked:
org.apache.activemq.usage.MemoryUsage
org.apache.activemq.management.PollCountStatisticImpl
org.apache.activemq.usage.DefaultUsageCapacity
Cause:
org.apache.activemq.broker.region.BaseDestination is a base class for queues
and by extension TempQueues.
When TempQueue is created it will call BaseDestination constructor which will
allocate some memory usage and statistics objects.
However, the cleanup operation is missing - when TempQueue is destroyed these
resources are not removed, and because these objects form a tree with the root
being the root SystemUsage object they are never deleted.
Solution:
BaseDestination should implement dispose() method - this method is already
defined in Destination interface but not implemented in BaseDestination.
This method should cleanup all the resources allocated during it's creation.
For example, see Queue.dispose().
--
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.