activemq-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Mark Webb" <elihusma...@gmail.com>
Subject Re: memory leak problem with ActiveMQ 5.1
Date Tue, 14 Oct 2008 13:36:04 GMT
So I would see this increase in memory on the JMS sender?  This seems a
little strange.  I have tried ActiveMQ 5.2 and see the same problem on the
sending client application.




On Fri, Oct 10, 2008 at 2:39 AM, Rob Davies <rajdavies@gmail.com> wrote:

> That's not a a memory leak you're seeing - that's the wacky  Retroactive
> Consumer functionality - see
> http://activemq.apache.org/retroactive-consumer.html
> The default policy is FixedSizeSubscrptionRecoveryPolicy - and the default
> cache size for each topic in 5.1 is about 6mb. I'd suggest configuring a
> smaller size for the cache (this is done by default in 5.2) - or disabling
> it all together ;) - see see
> http://activemq.apache.org/subscription-recovery-policy.html
>
>
> cheers,
>
> Rob
>
> http://fusesource.com
> http://rajdavies.blogspot.com/
>
>
>
>
> On 10 Oct 2008, at 01:55, Mark Webb wrote:
>
> I have run across a memory leak that I have been able to reproduce.  I
>> am profiling the sample application in NetBeans and I believe that I
>> have traced the problem to
>>
>> org.apache.activemq.openwire.v3.BaseDataStreamMarshaller.tightUnmarshalByteSequence(DataInput,
>> BooleanStream)
>>
>> The sample program is a very simple application that sends an object
>> that I wrote to ActiveMQ every 200ms.  In NetBeans I am using the
>> "Live Allocated Objects" view and approximately 80% of all objects are
>> byte[].  If I view the Allocation Call Tree, the first few methods in
>> the tree are:
>>
>> BaseDataStreamMarshaller.tightUnmarshalByteSequence(DataInput,
>> BooleanStream)
>>  org.apache.activemq.util.ByteArrayOutputStream.checkCapacity(int)
>>      org.apache.activemq.util.ByteArrayOutputStream.<init>
>>         java.lang.StringCoding$StringEncoder.encode(char[],int,int)
>>
>> The object that I am sending is a simple bean class and only contains
>> an int, String and byte[].
>>
>> I am using the base configuration for ActiveMQ.  All my sample
>> application does is call sendObject(Serializable) every 200ms.  Here
>> is the simple JMS library that I wrote:
>>
>> ------------- START --------------------------
>> public class JmsLib {
>>
>>   private TopicConnection connection;
>>   private Session session;
>>   private Topic destination;
>>   private MessageProducer producer;
>>   private MessageConsumer consumer;
>>
>>   public JmsLib( ActiveMQConnectionFactory connFactory, String dest
>> ) throws JMSException {
>>
>>       connection = connFactory.createTopicConnection();
>>       session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
>>       destination = session.createTopic( dest );
>>       producer = session.createProducer( destination );
>>       consumer = session.createConsumer( destination );
>>       connection.start();
>>   }
>>
>>   public void addMessageListener( MessageListener listener ) throws
>> JMSException{
>>       consumer.setMessageListener( listener );
>>   }
>>
>>   public void sendObject( Serializable object ) throws JMSException{
>>       ObjectMessage message = session.createObjectMessage( object );
>>       producer.send(message);
>>   }
>> }
>> --------------- END --------------------------
>>
>> Thanks for any help you may have...
>>
>
>

Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message