Jörg,
I finally did some analysis with yourkit today and indeed there is a
memory leak, I captured the issue and resolution with reference to
this thread in the issue:
https://issues.apache.org/activemq/browse/AMQ-2143

I think the resolution of the leak should help with more stable
enqueue rates. I will leave a steady state test running over night to
validate.

thanks for the analysis,
Gary.


2009/2/21 Cybexion <cybex...@email.de>:
>
> Hi Gary,
>
> we just made a new test which startet yesterday.
> JVM settings of AMQ where 3 GB heap size.
> We send about 800 msg / sec into the queue, the size was limited to 3 GB.
> During that time sending messages to the queue got slower and slower. Even
> after the queue was full and new messages have been thrown away. Futhermore,
> the memory consimption was increasing and increasing. I checked with
> visualvm and the heap was totally used. A full GC did not change anything.
> I tried to get a memdump with jmap but the jvm crashed :-(
> My current state is, that at least in my case AMQ is not usable for two
> reasons:
> 1. Obiously a mem leak
> 2. Sending messages to the queue takes more and more time the more messages
> have been send already.
>
> Best regards
>
> Jörg
>
>
>
>
> Gary Tully wrote:
>>
>> Hi Jörg,
>> I did some analysis of the per message allocations from your email. It
>> is clear that each store write allocates a bunch of objects, however,
>> from code inspection, I cannot see a point where they are leaked
>> through a reference.
>> There are two relevant points that may make static analysis a little
>> difficult. First is the fact that writes are asynchronous, so there
>> will be a small delay until write allocations are free for GC. This
>> should be very small in reality though.
>> Second is that store pages remain in memory until they are pushed out
>> of a LRU cache, a page has the possibility of referencing batch writes
>> and indexes with location information, ie: most of the per write
>> allocated objects.
>>
>> In short, we need to repeat your experiment with some more depth by
>> taking caching issues into consideration.  This is on my to do list.
>>
>> From a more high level view point, is it the case that a long running
>> test, with say 2000m/s in and out of the broker will eventually run
>> out of memory?
>>
>> I ask this because there are two sequential questions: 1) is there
>> really a memory leak (long running test gets into trouble) 2) if there
>> is a leak, where is it?
>>
>> Gary.
>>
>> 2009/2/13 Cybexion <cybex...@email.de>:
>>>
>>> Hello,
>>>
>>> I just tried something with the Netbeans memory profiler.
>>> My assumption is:
>>> If nothing hass been added to an application then after 2 full runs of
>>> the
>>> Garbace Collector the memory should be the same.
>>> In the past we have seen that memory was increasing while messages have
>>> been
>>> processed by AMQ. For me that means that something stays in memory even
>>> after those messages have been dequeued.
>>>
>>> My test looks like this:
>>> 1. start a fresh AMQ instance, send some messages to a queue for
>>> initialisation
>>> 2. do a full GC
>>> 3. Take a memory snapshot
>>> 4. send exactly 1000 message to the queue
>>> 5. consume all 1000 messages from the queue
>>> 6. do a full GC
>>> 7. Take a another memory snapshot
>>>
>>> Assumption:
>>> I would expect that no references to messages do exist any more in the
>>> AMQ
>>> JVM because they have all been processed. The memory should look more or
>>> less like it was before the test.
>>> Now I did a memory comparision of my two snapshots.
>>> The result looks like this:
>>> http://www.nabble.com/file/p22003872/AMQClasses.jpg
>>> From within the "org.apache.activemq" package there are exactly 1000
>>> MessageKeys, 1000 RemoveMessageCommands and 1000 AdMessageCommands left
>>> over.
>>> Shouldn't those have disappeared because the queue is empty???
>>>
>>> Additionaly, if we look at the "org.apache.kaha" package:
>>> http://www.nabble.com/file/p22003872/KahaClasses.jpg
>>> There are 2000 DataByteArrayOutputstreams, 2000 Location objects and 2000
>>> WriteCommands still inside the memory. I would also have expected that
>>> those
>>> do not exist after the queue is empty.
>>>
>>> Well, personally this does not help me, but maybe one of the developers
>>> can
>>> convert this information into a possible bug inside the code?
>>>
>>> Help would really be appreciated.
>>>
>>> Thanks
>>>
>>> Jörg
>>>
>>>
>>>
>>> --
>>> View this message in context:
>>> http://www.nabble.com/Memoryleak-when-consuming-messages-from-KahaDBStore-tp21991929p22003872.html
>>> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>>>
>>>
>>
>>
>>
>> --
>> http://blog.garytully.com
>>
>> Open Source SOA
>> http://FUSESource.com
>>
>>
>
> --
> View this message in context: 
> http://www.nabble.com/Memoryleak-when-consuming-messages-from-KahaDBStore-tp21991929p22141262.html
> Sent from the ActiveMQ - User mailing list archive at Nabble.com.
>
>



-- 
http://blog.garytully.com

Open Source SOA
http://FUSESource.com

Reply via email to