Sending a message to a queue is slow sometimes.
croy Apr 25, 2009 3:44 AMHi,
I am experiencing periodic performance issues when sending an object to a message queue on jboss 5 jmessaging.
Normally this operation takes 10 ms but sometimes(1%) I see 5+ seconds below is the code.
I have ruled out Garbage collection as the cause. Any advice on the code below specifically on the message send line and why it would be a resource problem - any queue sizing I need to be aware of?
I use mysql as the persistence layer to a localhost database - any connection pool sizing I should be aware of ( I use a connection pool of min 5 / max 20 ).
Any advice on performance please ?
Thanks,
Colm
public final static void sendObjectToQueue(String queueName, EPOSBatchMessage messageObject) { long startTime = System.currentTimeMillis(); QueueConnection conn = null; QueueSession session = null; Queue que = null; InitialContext iniCtx = null; QueueConnectionFactory qcf = null; Object tmp = null; QueueSender send = null; try { log.debug("PERFORMANCE: (sendObjectToQueue): size of message: " + messageObject.toString().length() + " - " + (System.currentTimeMillis() - startTime ) + "(ms)"); iniCtx = new InitialContext(); tmp = iniCtx.lookup("ConnectionFactory"); qcf = (QueueConnectionFactory) tmp; log.debug("PERFORMANCE: (sendObjectToQueue): About to create connection: " + (System.currentTimeMillis() - startTime ) + "(ms)"); conn = qcf.createQueueConnection(); log.debug("PERFORMANCE: (sendObjectToQueue): Connection Created: " + (System.currentTimeMillis() - startTime ) + "(ms)"); que = (Queue) iniCtx.lookup(queueName); log.debug("PERFORMANCE: (sendObjectToQueue): Queue lookup succeeded: " + (System.currentTimeMillis() - startTime ) + "(ms)"); session = conn.createQueueSession(false, QueueSession.AUTO_ACKNOWLEDGE); log.debug("PERFORMANCE: (sendObjectToQueue): Session Created: " + (System.currentTimeMillis() - startTime ) + "(ms)"); send = session.createSender(que); log.debug("PERFORMANCE: (sendObjectToQueue): Sender Created: " + (System.currentTimeMillis() - startTime ) + "(ms)"); ObjectMessage om = session.createObjectMessage(); om.setObject(messageObject); log.debug("PERFORMANCE: (sendObjectToQueue): Message Created: " + (System.currentTimeMillis() - startTime ) + "(ms)"); send.send(om); // <----- this is where the slow down is occuring log.debug("PERFORMANCE: (sendObjectToQueue): Message Sent: " + (System.currentTimeMillis() - startTime ) + "(ms)"); log.info("sendMessage, sent object = " + om + " sent queue = " + queueName); if(send!=null){ send.close(); } if(conn!=null){conn.close();} if(session!=null){session.close();} }catch (Exception e){ log.error("In sendObjectToQueue: caught exception: " + e); e.printStackTrace(); } long endTime = System.currentTimeMillis(); long time = endTime - startTime; log.debug("PERFORMANCE: (sendObjectToQueue" + queueName + " , " + messageObject + "): Time Taken: " + time + "(ms)");