Memory leak in ConnectionStateTracker with MessagePull objects
--------------------------------------------------------------
Key: AMQ-3316
URL: https://issues.apache.org/jira/browse/AMQ-3316
Project: ActiveMQ
Issue Type: Bug
Affects Versions: 5.5.0, 5.4.2
Reporter: Martin Carpella
Attachments: connectionstatetracker.patch
We discovered a memory leak in {{ConnectionStateTracker}} in case a long-lived
connection with prefetch=0 is used.
If prefetch=0 is used, {{MessagePull}} objects are enqueued in {{messageCache}}
with an estimated size of 400. But in the cache's {{removeEldestEntry()}}
method no size is subtracted from {{currentCacheSize}} for {{MessagePull}}
instances. This messes with the cache as it will continue to remove objects
even if there is space in the cache. But after about 5,368,709 consumed
messages this will cause the {{currentCacheSize}} to roll-over maximum integer
and become negative. As a consequence, for the next about 5,368,709 no messages
will be removed from the cache any longer.
This sooner or later will trigger out-of-memory conditions, depending on the
size of the various pools. In our case this caused out-of-memory in PermGen
first, as message IDs seem to be internalized, and PermGen is considerably
smaller than the heap.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira