I opened issue https://issues.apache.org/activemq/browse/AMQ-1889
and have committed a fix. Thanks for the report.. Still looking
forward for your test case contribution so that the test suite can
catch this error in the future.
On Fri, Aug 15, 2008 at 8:35 AM, Hiram Chirino <[EMAIL PROTECTED]> wrote:
> I just tried out your attached test case and yeah it looks like a
> problem. Could you shoot us back an email letting us know that you
> are willing to contribute the test case to the ASF under the ASL 2.0
> license so we can include parts of it in test suite?
>
> On Mon, Aug 4, 2008 at 6:26 PM, Pieper, Aaron (SAIC)
> <[EMAIL PROTECTED]> wrote:
>> I'm encountering what appears to be a memory leak in the BrokerService.
>> The symptom is that the BrokerService's memory usage increases with each
>> message that is sent to a topic, as though each message is being stored
>> permanently in memory.
>>
>>
>>
>> I've included an example which demonstrates the issue. If you run the
>> included BrokerMemoryLeak.java, you should see the following output:
>>
>>
>>
>> Memory Usage: 0 Memory Percent: 0 Send count: 0
>>
>> Memory Usage: 16016576 Memory Percent: 23 Send count: 16
>>
>> Memory Usage: 38039368 Memory Percent: 56 Send count: 38
>>
>> Memory Usage: 61063196 Memory Percent: 90 Send count: 61
>>
>> Memory Usage: 68070448 Memory Percent: 101 Send count: 68
>>
>> Memory Usage: 68070448 Memory Percent: 101 Send count: 68
>>
>> Memory Usage: 68070448 Memory Percent: 101 Send count: 68
>>
>>
>>
>> BrokerService's memory usage climbs steadily until the memory percent
>> hits 100. Then, messages stop being sent. There are several ways to make
>> the bug stop happening:
>>
>> * Switch from using a Topic to a Queue
>>
>> * Switch the Broker address to 'vm://foo', so it's not using TCP
>>
>> * Set the third argument in the 'createConsumer' call to false. (the
>> noLocal argument)
>>
>> * Don't register the MessageListener
>>
>>
>>
>> I've witnessed this behavior both with ActiveMQ 5.1.0 and the
>> 5.2-SNAPSHOT version available as of August 4, 2008. I'm using Spring
>> 2.5.4. Since two-way traffic isn't an issue for this application, I can
>> fix the issue by setting 'noLocal' to false. However, I wasn't sure
>> whether I should submit a JIRA tracker for this, or whether I'm doing
>> something wrong.
>>
>>
>>
>> Thanks,
>>
>>
>>
>> - Aaron Pieper
>>
>>
>>
>> --------------------------------
>>
>>
>>
>> import java.util.HashMap;
>>
>> import java.util.Timer;
>>
>> import java.util.TimerTask;
>>
>>
>>
>> import javax.jms.Connection;
>>
>> import javax.jms.Message;
>>
>> import javax.jms.MessageConsumer;
>>
>> import javax.jms.MessageListener;
>>
>> import javax.jms.Session;
>>
>> import javax.jms.Topic;
>>
>>
>>
>> import org.apache.activemq.ActiveMQConnectionFactory;
>>
>> import org.apache.activemq.ActiveMQSession;
>>
>> import org.apache.activemq.broker.BrokerService;
>>
>> import org.apache.activemq.usage.MemoryUsage;
>>
>> import org.springframework.jms.core.JmsTemplate;
>>
>>
>>
>> public class BrokerMemoryLeak {
>>
>> private int sendCount;
>>
>> private BrokerService broker = new BrokerService();
>>
>>
>>
>> public static void main(String[] args) throws Exception {
>>
>> new BrokerMemoryLeak().run();
>>
>> }
>>
>>
>>
>> private void run() throws Exception {
>>
>> broker.addConnector("tcp://localhost:8192");
>>
>> broker.setPersistent(false);
>>
>> broker.start();
>>
>>
>>
>> ActiveMQConnectionFactory connectionFactory = (new
>> ActiveMQConnectionFactory("tcp://localhost:8192"));
>>
>> Connection connection =
>> connectionFactory.createConnection();
>>
>> connection.start();
>>
>>
>>
>> ActiveMQSession session = (ActiveMQSession)
>> connection.createSession(false, Session.AUTO_ACKNOWLEDGE);
>>
>> Topic topic = session.createTopic("foo");
>>
>> MessageConsumer messageConsumer =
>> session.createConsumer(topic, null, true);
>>
>>
>>
>> messageConsumer.setMessageListener(new MessageListener() {
>>
>> public void onMessage(Message message) {}
>>
>> });
>>
>>
>>
>> TimerTask statusTask = new TimerTask() {
>>
>> @Override
>>
>> public void run() {
>>
>> StringBuffer buf = new StringBuffer();
>>
>> MemoryUsage memoryUsage =
>> broker.getSystemUsage().getMemoryUsage();
>>
>> buf.append("Memory
>> Usage:\t").append(memoryUsage.getUsage()).append("\t");
>>
>> buf.append("Memory
>> Percent:\t").append(memoryUsage.getPercentUsage()).append("\t");
>>
>> buf.append("Send
>> count:\t").append(sendCount).append("\t");
>>
>> System.out.println(buf);
>>
>> }
>>
>> };
>>
>>
>>
>> new Timer().schedule(statusTask, 0, 1000);
>>
>>
>>
>> JmsTemplate template = new JmsTemplate();
>>
>> template.setConnectionFactory(connectionFactory);
>>
>> template.afterPropertiesSet();
>>
>>
>>
>> while (true) {
>>
>> HashMap<String, Object> map = new HashMap<String,
>> Object>();
>>
>> map.put("1", new byte[1000000]);
>>
>> template.convertAndSend(topic, map);
>>
>> sendCount++;
>>
>> Thread.sleep(1);
>>
>> }
>>
>> }
>>
>> }
>>
>>
>
>
>
> --
> Regards,
> Hiram
>
> Blog: http://hiramchirino.com
>
> Open Source SOA
> http://open.iona.com
>
--
Regards,
Hiram
Blog: http://hiramchirino.com
Open Source SOA
http://open.iona.com