activemq-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Martin Carpella (JIRA)" <>
Subject [jira] [Created] (AMQ-3316) Memory leak in ConnectionStateTracker with MessagePull objects
Date Wed, 11 May 2011 18:15:47 GMT
Memory leak in ConnectionStateTracker with MessagePull objects

                 Key: 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:

View raw message