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

Reply via email to