On 9/11/07, Rafael Schloming <[EMAIL PROTECTED]> wrote:
>
> Rajith Attapattu wrote:
> > Jodi,
> >
> > Thanks for the feedback.
> > Comments inline
> >
> > Regards,
> >
> > Rajith
> >
> > On 9/11/07, Jodi Moran <[EMAIL PROTECTED]> wrote:
> >> Hi all,
> >>
> >> I'm having problems using the Qpid M2 Java client (JMS to AMQP) for
> >> publishing messages in a load test. When I publish messages as quickly
> >> as possible, the publishing client runs out of memory (no matter what
> >> limit I set). I am using only the minimum of the JMS interface:
> >>
> >>             InitialContext jndiContext = new
> >> InitialContext(additionalJNDIProps);
> >>             connectionFactory = (ConnectionFactory)
> >> jndiContext.lookup(connectionFactoryJNDIName);
> >>             destination = (Destination) jndiContext.lookup(topicName);
> >>             connection = connectionFactory.createConnection();
> >>             jmsSession = connection.createSession(false,
> >> Session.AUTO_ACKNOWLEDGE);
> >>             jmsMessageProducer = jmsSession.createProducer
> (destination);
> >>
> >> jmsMessageProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
> >>
> >> And later, in a loop:
> >>
> >>             BytesMessage message = jmsSession.createBytesMessage();
> >>             message.writeBytes(messageContent);
> >>             jmsMessageProducer.send(message);
> >>
> >> After making use of profilers and heap dumps, it appears that the OOM
> is
> >> caused by the fact that the publishing thread by default does not block
> >> during the send but just adds the write request to an (unbounded) queue
> >> internal to Mina. Since in my case (it seems) the I/O is slower than
> the
> >> publishing thread, the write request queue continues to grow until it
> >> causes the OOM.
> >>
> >> I've noticed that there is functionality in the BasicMessageProducer
> >> that allows the user to block on writes (_waitUntilSent), but it seems
> >> that this functionality is not even exposed via the extended interfaces
> >> (i.e. org.apache.qpid.jms.MessageProducer or
> >> org.apache.qpid.jms.Session) and so requires a cast to
> >> BasicMessageProducer or to AMQSession to use. Is the only way to get
> >> flow control in my publishing client to make use of _waitUntilSent or
> is
> >> there some other way I can achieve the same effect?
> >
> >
> > Currently this is the only way  to set this.
> > However we could provide a jvm argument to set it, so that u don't have
> to
> > cast it to any AMQ specific class.
> > We might repsin the M2 release again. We can add this feature if it
> helps.
> >
> > Doing this block will slow down your application.
> > Without the block atleast your application can continue publishing at a
> > higher rate, until the internal MINA queue starts to grow due to IO
> being
> > slow.
> > Is there any way you can throttle the publish rate in your application?
> > After some experimenting you maybe able to find a sweet spot that is
> right
> > for your environment. This might yeild a higher average publish rate
> than a
> > block for every publish type of solution.
>
> We should really do the throttling automatically, i.e. we should block
> when the MINA queue exceeds a certain limit, but not if it is below that
> limit


Rafi, I thought about this initially, but since this queue is internal to
MINA, I wasn't sure if we can know the current queue size etc ?

Rajith

--Rafael
>

Reply via email to