On 6/25/07, comchyi <[EMAIL PROTECTED]> wrote:

I find an performance problem in ActiveMQ4.2-SNAPSHOT when
i subscribe an topic and consume 500000 messages,the problem
is that the memory of CPU is  consumed increasely all long until
the  free heap of JVM's memory  is  zone. The client code like this:
                         if (message instanceof TextMessage) {
                                txtMsg = (TextMessage) message;
                                String msg = txtMsg.getText();
                                .....
                        }
I test this code by  JProfiler which is a tool of testing performance ,and
find the cause is the method of txtMsg.getText() ,its implement method is
the org.apache.activemq.command.ActiveMQTextMessage.getText(),the code of
this method is :
package org.apache.activemq.command;
public class ActiveMQTextMessage extends ActiveMQMessage implements
TextMessage {
.......
 public String getText() throws JMSException {
        if (text == null && getContent() != null) {
            try {
                ByteSequence bodyAsBytes = getContent();
                if (bodyAsBytes != null) {
                    InputStream is = new ByteArrayInputStream(bodyAsBytes);
                    if( isCompressed() ) {
                        is = new InflaterInputStream(is);
                    }
                    DataInputStream dataIn = new DataInputStream(is);
                    text = MarshallingSupport.readUTF8(dataIn);
                    dataIn.close();
                    setContent(null);
                }
            } catch (IOException ioe) {
                throw JMSExceptionSupport.create(ioe);
            }
        }
        return text;
    }
......
}
In this code ,the instance  " is " is not closed ,i think must invoke
the method   in.close() to release the memory of JVM.I  suggest
modify the method  ActiveMQTextMessage.getText().

I don't really see how ByteArrayInputStream or InflaterInputStream are
memory leaks as they are constructed in each method and take a byte
sequence, but I've applied a patch to always close it anyway
--
James
-------
http://macstrac.blogspot.com/

Reply via email to