Your attachments were stripped (you need to link to items of any significant size) so it wasn't clear which broker you were discussing, but I ran the test against the Java broker anyway and have identified an issue which would present itself particularly badly in this scenario (create consumer, receive one message from a queue containing many more messages, close consumer, repeat). The problem is not actually related to the number of connections but the number of consumers created combined with the fact that the queue has a backlog of messages.
I have raised a JIRA to track this and have initially classed it as a release blocker: https://issues.apache.org/jira/browse/QPID-3157 Robbie From: Amila Suriarachchi [mailto:[email protected]] Sent: 19 March 2011 07:57 To: [email protected] Cc: Justin Ross Subject: Re: 0.10 release update - RC1 and status I tried to simulate a memory leak with occur in our environment by using the following program. public static void main(String[] args) { try { Properties properties = new Properties(); properties.put("connectionfactory.qpidConnectionfactory", "amqp://admin:admin@clientID/test?brokerlist='tcp://localhost:5672'"); properties.put("queue.queueName", "myQueue"); properties.put("java.naming.factory.initial", "org.apache.qpid.jndi.PropertiesFileInitialContextFactory"); final Context context = new InitialContext(properties); Runnable messageReceiver = new Runnable() { public void run() { while (true) { try { ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("qpidConnectionfactory"); Connection connection = connectionFactory.createConnection(); connection.start(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); Destination destination = (Destination) context.lookup("queueName"); MessageConsumer messageConsumer = session.createConsumer(destination); TextMessage textMessage = (TextMessage) messageConsumer.receive(); System.out.println(textMessage.getText()); messageConsumer.close(); session.close(); connection.stop(); connection.close(); } catch (JMSException e) { e.printStackTrace(); } catch (NamingException e) { e.printStackTrace(); } } } }; Thread messageReceiveThread = new Thread(messageReceiver); messageReceiveThread.start(); // let consumer to start first. Thread.sleep(2000); for (int i = 0; i < 10000; i++) { ConnectionFactory connectionFactory = (ConnectionFactory) context.lookup("qpidConnectionfactory"); Connection connection = connectionFactory.createConnection(); connection.start(); Session session = connection.createSession(false, Session.AUTO_ACKNOWLEDGE); Destination destination = (Destination) context.lookup("queueName"); MessageProducer messageProducer = session.createProducer(destination); TextMessage message = session.createTextMessage("Hello world message to test the qpid " + i); messageProducer.send(message); messageProducer.close(); session.close(); connection.stop(); connection.close(); Thread.sleep(50); } } catch (Exception exp) { exp.printStackTrace(); } } After running this for about 7000 messages, Qpid server goes out of memory. Please see the attachments. I think this is a problem with connection removing when creating a lot of connections. thanks, Amila. On Sat, Mar 19, 2011 at 12:25 PM, Amila Suriarachchi <[email protected]> wrote: I tried to create a durable queue like this queue = queueSession.createQueue("myQueue;{create:always, node:{durable: True}}"); QueueSender queueSender = queueSession.createSender(queue); queueSender.send(textMessage); and getting this exception. Caused by: java.lang.ClassCastException: java.lang.Boolean cannot be cast to java.lang.String at org.apache.qpid.client.messaging.address.AddressHelper.getDurability(Address Helper.java:237) at org.apache.qpid.client.messaging.address.AddressHelper.fillInCommonNodeArgs( AddressHelper.java:222) at org.apache.qpid.client.messaging.address.AddressHelper.createQueueNode(Addre ssHelper.java:215) at org.apache.qpid.client.messaging.address.AddressHelper.getSourceNode(Address Helper.java:254) at org.apache.qpid.client.AMQDestination.rebuildTargetAndSourceNodes(AMQDestina tion.java:888) at org.apache.qpid.client.AMQSession_0_10.resolveAddressType(AMQSession_0_10.ja va:1272) thanks, Amila. On Fri, Mar 18, 2011 at 9:26 PM, Justin Ross <[email protected]> wrote: On Fri, 18 Mar 2011, Robert Godfrey wrote: I know Gordon said: "Specifically I'd suggest that unless anyone has specific updates to the following artefacts - and volunteers to verify the artefact for the release - we remove them from the published list: qpid-dotnet-0-8-0.10-beta.zip qpid-dotnet-0-10-0.10-beta. zip qpid-ruby-0.10-beta.tar.gz This will avoid giving false impressions about ongoing maintenance for these clients" But I think that if we are going to actually do this, we should formally vote for it, and move the codebases for these artefacts into an "attic" directory or similar. I'm not against removing unloved and unmaintained code... but I do feel that we should vote before adding or removing artefacts to/from the release. Okay. I'll restore these to RC2 unless there's a vote to remove them. Justin --------------------------------------------------------------------- Apache Qpid - AMQP Messaging Implementation Project: http://qpid.apache.org Use/Interact: mailto:[email protected] -- Amila Suriarachchi WSO2 Inc. blog: http://amilachinthaka.blogspot.com/ -- Amila Suriarachchi WSO2 Inc. blog: http://amilachinthaka.blogspot.com/
