You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@activemq.apache.org by garima015 <ga...@rediffmail.com> on 2006/12/18 19:59:53 UTC

Performance Issue

I am facing a really bad performance of ActiveMq on linux box. 
When running on windows 1000 transactions are taking 2 seconds and when
running on Linux same are taking 40 sec. 
Please if anybody can tell me solution to performance issue. 

Here is the code i am using to send and receive the message. 

Thanks in advance 

public class Requestor{ 
        private Session session; 
        private Destination replyQueue; 
        private MessageProducer requestProducer; 
        private MessageConsumer replyConsumer; 
        Logger logger = null; 
        
        /** 
         * Constructor 
         */ 
        protected Requestor() { 
                super(); 
                logger = LoggerWrapper.getLogger(this.getClass().getName()); 
        } 
        
        /** 
         * This method will return the object of Requestor 
         * @param connection, Connection 
         * @param requestQueueName , String 
         * @return  Requestor object 
         * @throws JMSException 
         * @throws NamingException 
         */ 
        public static Requestor newRequestor(Connection connection, String
requestQueueName)throws JMSException, NamingException { 
                Requestor requestor = new Requestor(); 
                requestor.initialize(connection, requestQueueName); 
                return requestor; 
        } 
        
        /** 
         * This method will initialize the Producer and Consumer on request
and reply queue 
         * @param connection, Connection 
         * @param requestQueueName , String 
         * @throws NamingException 
         * @throws JMSException 
         */ 
        protected void initialize(Connection connection, String
requestQueueName)throws NamingException, JMSException { 
                session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE); 
                Destination requestQueue =
session.createQueue(requestQueueName); 
        
                replyQueue = session.createTemporaryQueue(); 
                requestProducer = session.createProducer(requestQueue); 
               
requestProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT); 
                replyConsumer = session.createConsumer(replyQueue); 
                replyConsumer.receive(10); 
        } 
        
        /** 
         * This method is used to send the message to queue 
         * @param message 
         * @throws JMSException 
         */ 
        public String send(String message) throws JMSException { 
                TextMessage requestMessage = (TextMessage)
session.createTextMessage(); 
                requestMessage.setText(message); 
                requestMessage.setJMSReplyTo(replyQueue); 
                requestProducer.send(requestMessage); 
                return receiveSync(); 
        } 
        
        /** 
         * This method is used to receive the message from the queue 
         * @return String 
         * @throws JMSException 
         */ 
        private String receiveSync() throws JMSException { 
                TextMessage replyMessage = null; 
                Message msg =  replyConsumer.receive(); 
                
                if (msg instanceof TextMessage){ 
                        replyMessage = (TextMessage) msg; 
                } 
                logger.debug("receive Sync:"+ new Date().getTime()); 
                return replyMessage.getText(); 
    } 
} 

public class Replier implements MessageListener { 

        private Session session; 
        Logger logger = null; 
    Engine engineRef = null; 
    Transformer transformerRef = null; 
    MessageConsumer requestConsumer = null; 
    Destination replyDestination = null; 
    private static Map destinationMap = new HashMap(); 
    /** 
     * Constructor 
     * 
     */ 
        protected Replier(){ 
        super(); 
                logger = LoggerWrapper.getLogger(this.getClass().getName()); 
        } 
        
        /** 
         * This will return the instance of replier 
         * @param connection, Connection 
         * @param requestQueueName 
         * @return 
         * @throws Exception 
         */ 
        public static Replier newReplier(Connection connection,String
requestQueueName ,Engine engine,Transformer transformer)throws Exception { 
                Replier replier = new Replier(); 
                replier.initialize(connection,
requestQueueName,engine,transformer); 
                return replier; 
        } 
        
        /** 
         * This method will initilize the consumer on request queue 
         * @param connection 
         * @param requestQueueName 
         * @throws Exception 
         */ 
        protected void initialize(Connection connection, String
requestQueueName, Engine engine,Transformer transformer)throws Exception { 
                session = connection.createSession(false,
Session.AUTO_ACKNOWLEDGE); 
                
        // Create the destination (Topic or Queue) 
                //Destination requestQueue =
session.createQueue(requestQueueName+"?consumer.retroactive=true"); 
                Destination requestQueue =
session.createQueue(requestQueueName); 
                requestConsumer = session.createConsumer(requestQueue); 
                MessageListener listener = this; 
                requestConsumer.setMessageListener(listener); 
                engineRef = engine; 
                transformerRef = transformer; 
        } 
        
        /** 
         * This method will be called when ever the message will be placed
on Message queue 
         */ 
        public void onMessage(Message message) { 
                try { 
                        logger.debug("On message:"+ new Date().getTime()); 
                        if ((message instanceof TextMessage) &&
(message.getJMSReplyTo() != null)) { 
                                TextMessage requestMessage = (TextMessage)
message; 
                                String contents = requestMessage.getText(); 

                                Object obj =
transformerRef.transform(contents); 
                engineRef.process(obj); 
                contents = (String)transformerRef.transform(obj); 
                
                if(null ==
destinationMap.get(message.getJMSReplyTo().hashCode())){ 
                   destinationMap.put(message.getJMSReplyTo().hashCode(),
message.getJMSReplyTo()); 
                   replyDestination = message.getJMSReplyTo(); 
                   logger.info("In new"); 
                }else{ 
                replyDestination = (Destination)
destinationMap.get(message.getJMSReplyTo().hashCode()); 
                logger.info("in already"); 
                }   
  
     MessageProducer replyProducer =
session.createProducer(replyDestination); 
                                TextMessage replyMessage =
session.createTextMessage(); 
                                replyMessage.setText(contents); 
                               
replyMessage.setJMSCorrelationID(requestMessage.getJMSMessageID()); 
                                replyProducer.send(replyMessage); 
                        } 
                }catch (JMSException ex) { 
                        logger.fatal("Failing while reading the message from
queue"+ex.getMessage(),ex); 
                }catch (Exception e) { 
                        logger.fatal("Failing while transforming the
message"+e.getMessage(),e); 
                } 
        } 
        
} 

-- 
View this message in context: http://www.nabble.com/Performance-Issue-tf2841698.html#a7934436
Sent from the ActiveMQ - Dev mailing list archive at Nabble.com.


Re: Performance Issue

Posted by garima015 <ga...@rediffmail.com>.
Changing the delivery mode to NONpersisitent and creating the session using
Session.DUPS_OK_ACKNOWLEDGE is effectively increasing the performance..now
it is processing 1000 transactions in less than 2 sec

James.Strachan wrote:
> 
> On 12/19/06, garima015 <ga...@rediffmail.com> wrote:
>>
>> Thanks for the reply,but it is solved.
> 
> How did you solve it?
> 
> -- 
> 
> James
> -------
> http://radio.weblogs.com/0112098/
> 
> 

-- 
View this message in context: http://www.nabble.com/Performance-Issue-tf2841698.html#a7952578
Sent from the ActiveMQ - Dev mailing list archive at Nabble.com.


Re: Performance Issue

Posted by James Strachan <ja...@gmail.com>.
On 12/19/06, garima015 <ga...@rediffmail.com> wrote:
>
> Thanks for the reply,but it is solved.

How did you solve it?

-- 

James
-------
http://radio.weblogs.com/0112098/

Re: Performance Issue

Posted by garima015 <ga...@rediffmail.com>.
Thanks for the reply,but it is solved.


Hiram Chirino wrote:
> 
> Best bet is to run it with a profiler to figure out where the hot spot
> is for linux.
> 
> On 12/18/06, garima015 <ga...@rediffmail.com> wrote:
>>
>> I am facing a really bad performance of ActiveMq on linux box.
>> When running on windows 1000 transactions are taking 2 seconds and when
>> running on Linux same are taking 40 sec.
>> Please if anybody can tell me solution to performance issue.
>>
>> Here is the code i am using to send and receive the message.
>>
>> Thanks in advance
>>
>> public class Requestor{
>>         private Session session;
>>         private Destination replyQueue;
>>         private MessageProducer requestProducer;
>>         private MessageConsumer replyConsumer;
>>         Logger logger = null;
>>
>>         /**
>>          * Constructor
>>          */
>>         protected Requestor() {
>>                 super();
>>                 logger =
>> LoggerWrapper.getLogger(this.getClass().getName());
>>         }
>>
>>         /**
>>          * This method will return the object of Requestor
>>          * @param connection, Connection
>>          * @param requestQueueName , String
>>          * @return  Requestor object
>>          * @throws JMSException
>>          * @throws NamingException
>>          */
>>         public static Requestor newRequestor(Connection connection,
>> String
>> requestQueueName)throws JMSException, NamingException {
>>                 Requestor requestor = new Requestor();
>>                 requestor.initialize(connection, requestQueueName);
>>                 return requestor;
>>         }
>>
>>         /**
>>          * This method will initialize the Producer and Consumer on
>> request
>> and reply queue
>>          * @param connection, Connection
>>          * @param requestQueueName , String
>>          * @throws NamingException
>>          * @throws JMSException
>>          */
>>         protected void initialize(Connection connection, String
>> requestQueueName)throws NamingException, JMSException {
>>                 session = connection.createSession(false,
>> Session.AUTO_ACKNOWLEDGE);
>>                 Destination requestQueue =
>> session.createQueue(requestQueueName);
>>
>>                 replyQueue = session.createTemporaryQueue();
>>                 requestProducer = session.createProducer(requestQueue);
>>
>> requestProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
>>                 replyConsumer = session.createConsumer(replyQueue);
>>                 replyConsumer.receive(10);
>>         }
>>
>>         /**
>>          * This method is used to send the message to queue
>>          * @param message
>>          * @throws JMSException
>>          */
>>         public String send(String message) throws JMSException {
>>                 TextMessage requestMessage = (TextMessage)
>> session.createTextMessage();
>>                 requestMessage.setText(message);
>>                 requestMessage.setJMSReplyTo(replyQueue);
>>                 requestProducer.send(requestMessage);
>>                 return receiveSync();
>>         }
>>
>>         /**
>>          * This method is used to receive the message from the queue
>>          * @return String
>>          * @throws JMSException
>>          */
>>         private String receiveSync() throws JMSException {
>>                 TextMessage replyMessage = null;
>>                 Message msg =  replyConsumer.receive();
>>
>>                 if (msg instanceof TextMessage){
>>                         replyMessage = (TextMessage) msg;
>>                 }
>>                 logger.debug("receive Sync:"+ new Date().getTime());
>>                 return replyMessage.getText();
>>     }
>> }
>>
>> public class Replier implements MessageListener {
>>
>>         private Session session;
>>         Logger logger = null;
>>     Engine engineRef = null;
>>     Transformer transformerRef = null;
>>     MessageConsumer requestConsumer = null;
>>     Destination replyDestination = null;
>>     private static Map destinationMap = new HashMap();
>>     /**
>>      * Constructor
>>      *
>>      */
>>         protected Replier(){
>>         super();
>>                 logger =
>> LoggerWrapper.getLogger(this.getClass().getName());
>>         }
>>
>>         /**
>>          * This will return the instance of replier
>>          * @param connection, Connection
>>          * @param requestQueueName
>>          * @return
>>          * @throws Exception
>>          */
>>         public static Replier newReplier(Connection connection,String
>> requestQueueName ,Engine engine,Transformer transformer)throws Exception
>> {
>>                 Replier replier = new Replier();
>>                 replier.initialize(connection,
>> requestQueueName,engine,transformer);
>>                 return replier;
>>         }
>>
>>         /**
>>          * This method will initilize the consumer on request queue
>>          * @param connection
>>          * @param requestQueueName
>>          * @throws Exception
>>          */
>>         protected void initialize(Connection connection, String
>> requestQueueName, Engine engine,Transformer transformer)throws Exception
>> {
>>                 session = connection.createSession(false,
>> Session.AUTO_ACKNOWLEDGE);
>>
>>         // Create the destination (Topic or Queue)
>>                 //Destination requestQueue =
>> session.createQueue(requestQueueName+"?consumer.retroactive=true");
>>                 Destination requestQueue =
>> session.createQueue(requestQueueName);
>>                 requestConsumer = session.createConsumer(requestQueue);
>>                 MessageListener listener = this;
>>                 requestConsumer.setMessageListener(listener);
>>                 engineRef = engine;
>>                 transformerRef = transformer;
>>         }
>>
>>         /**
>>          * This method will be called when ever the message will be
>> placed
>> on Message queue
>>          */
>>         public void onMessage(Message message) {
>>                 try {
>>                         logger.debug("On message:"+ new
>> Date().getTime());
>>                         if ((message instanceof TextMessage) &&
>> (message.getJMSReplyTo() != null)) {
>>                                 TextMessage requestMessage =
>> (TextMessage)
>> message;
>>                                 String contents =
>> requestMessage.getText();
>>
>>                                 Object obj =
>> transformerRef.transform(contents);
>>                 engineRef.process(obj);
>>                 contents = (String)transformerRef.transform(obj);
>>
>>                 if(null ==
>> destinationMap.get(message.getJMSReplyTo().hashCode())){
>>                    destinationMap.put(message.getJMSReplyTo().hashCode(),
>> message.getJMSReplyTo());
>>                    replyDestination = message.getJMSReplyTo();
>>                    logger.info("In new");
>>                 }else{
>>                 replyDestination = (Destination)
>> destinationMap.get(message.getJMSReplyTo().hashCode());
>>                 logger.info("in already");
>>                 }
>>
>>      MessageProducer replyProducer =
>> session.createProducer(replyDestination);
>>                                 TextMessage replyMessage =
>> session.createTextMessage();
>>                                 replyMessage.setText(contents);
>>
>> replyMessage.setJMSCorrelationID(requestMessage.getJMSMessageID());
>>                                 replyProducer.send(replyMessage);
>>                         }
>>                 }catch (JMSException ex) {
>>                         logger.fatal("Failing while reading the message
>> from
>> queue"+ex.getMessage(),ex);
>>                 }catch (Exception e) {
>>                         logger.fatal("Failing while transforming the
>> message"+e.getMessage(),e);
>>                 }
>>         }
>>
>> }
>>
>> --
>> View this message in context:
>> http://www.nabble.com/Performance-Issue-tf2841698.html#a7934436
>> Sent from the ActiveMQ - Dev mailing list archive at Nabble.com.
>>
>>
> 
> 
> -- 
> Regards,
> Hiram
> 
> Blog: http://hiramchirino.com
> 
> 

-- 
View this message in context: http://www.nabble.com/Performance-Issue-tf2841698.html#a7948596
Sent from the ActiveMQ - Dev mailing list archive at Nabble.com.


Re: Performance Issue

Posted by Hiram Chirino <hi...@hiramchirino.com>.
Best bet is to run it with a profiler to figure out where the hot spot
is for linux.

On 12/18/06, garima015 <ga...@rediffmail.com> wrote:
>
> I am facing a really bad performance of ActiveMq on linux box.
> When running on windows 1000 transactions are taking 2 seconds and when
> running on Linux same are taking 40 sec.
> Please if anybody can tell me solution to performance issue.
>
> Here is the code i am using to send and receive the message.
>
> Thanks in advance
>
> public class Requestor{
>         private Session session;
>         private Destination replyQueue;
>         private MessageProducer requestProducer;
>         private MessageConsumer replyConsumer;
>         Logger logger = null;
>
>         /**
>          * Constructor
>          */
>         protected Requestor() {
>                 super();
>                 logger = LoggerWrapper.getLogger(this.getClass().getName());
>         }
>
>         /**
>          * This method will return the object of Requestor
>          * @param connection, Connection
>          * @param requestQueueName , String
>          * @return  Requestor object
>          * @throws JMSException
>          * @throws NamingException
>          */
>         public static Requestor newRequestor(Connection connection, String
> requestQueueName)throws JMSException, NamingException {
>                 Requestor requestor = new Requestor();
>                 requestor.initialize(connection, requestQueueName);
>                 return requestor;
>         }
>
>         /**
>          * This method will initialize the Producer and Consumer on request
> and reply queue
>          * @param connection, Connection
>          * @param requestQueueName , String
>          * @throws NamingException
>          * @throws JMSException
>          */
>         protected void initialize(Connection connection, String
> requestQueueName)throws NamingException, JMSException {
>                 session = connection.createSession(false,
> Session.AUTO_ACKNOWLEDGE);
>                 Destination requestQueue =
> session.createQueue(requestQueueName);
>
>                 replyQueue = session.createTemporaryQueue();
>                 requestProducer = session.createProducer(requestQueue);
>
> requestProducer.setDeliveryMode(DeliveryMode.NON_PERSISTENT);
>                 replyConsumer = session.createConsumer(replyQueue);
>                 replyConsumer.receive(10);
>         }
>
>         /**
>          * This method is used to send the message to queue
>          * @param message
>          * @throws JMSException
>          */
>         public String send(String message) throws JMSException {
>                 TextMessage requestMessage = (TextMessage)
> session.createTextMessage();
>                 requestMessage.setText(message);
>                 requestMessage.setJMSReplyTo(replyQueue);
>                 requestProducer.send(requestMessage);
>                 return receiveSync();
>         }
>
>         /**
>          * This method is used to receive the message from the queue
>          * @return String
>          * @throws JMSException
>          */
>         private String receiveSync() throws JMSException {
>                 TextMessage replyMessage = null;
>                 Message msg =  replyConsumer.receive();
>
>                 if (msg instanceof TextMessage){
>                         replyMessage = (TextMessage) msg;
>                 }
>                 logger.debug("receive Sync:"+ new Date().getTime());
>                 return replyMessage.getText();
>     }
> }
>
> public class Replier implements MessageListener {
>
>         private Session session;
>         Logger logger = null;
>     Engine engineRef = null;
>     Transformer transformerRef = null;
>     MessageConsumer requestConsumer = null;
>     Destination replyDestination = null;
>     private static Map destinationMap = new HashMap();
>     /**
>      * Constructor
>      *
>      */
>         protected Replier(){
>         super();
>                 logger = LoggerWrapper.getLogger(this.getClass().getName());
>         }
>
>         /**
>          * This will return the instance of replier
>          * @param connection, Connection
>          * @param requestQueueName
>          * @return
>          * @throws Exception
>          */
>         public static Replier newReplier(Connection connection,String
> requestQueueName ,Engine engine,Transformer transformer)throws Exception {
>                 Replier replier = new Replier();
>                 replier.initialize(connection,
> requestQueueName,engine,transformer);
>                 return replier;
>         }
>
>         /**
>          * This method will initilize the consumer on request queue
>          * @param connection
>          * @param requestQueueName
>          * @throws Exception
>          */
>         protected void initialize(Connection connection, String
> requestQueueName, Engine engine,Transformer transformer)throws Exception {
>                 session = connection.createSession(false,
> Session.AUTO_ACKNOWLEDGE);
>
>         // Create the destination (Topic or Queue)
>                 //Destination requestQueue =
> session.createQueue(requestQueueName+"?consumer.retroactive=true");
>                 Destination requestQueue =
> session.createQueue(requestQueueName);
>                 requestConsumer = session.createConsumer(requestQueue);
>                 MessageListener listener = this;
>                 requestConsumer.setMessageListener(listener);
>                 engineRef = engine;
>                 transformerRef = transformer;
>         }
>
>         /**
>          * This method will be called when ever the message will be placed
> on Message queue
>          */
>         public void onMessage(Message message) {
>                 try {
>                         logger.debug("On message:"+ new Date().getTime());
>                         if ((message instanceof TextMessage) &&
> (message.getJMSReplyTo() != null)) {
>                                 TextMessage requestMessage = (TextMessage)
> message;
>                                 String contents = requestMessage.getText();
>
>                                 Object obj =
> transformerRef.transform(contents);
>                 engineRef.process(obj);
>                 contents = (String)transformerRef.transform(obj);
>
>                 if(null ==
> destinationMap.get(message.getJMSReplyTo().hashCode())){
>                    destinationMap.put(message.getJMSReplyTo().hashCode(),
> message.getJMSReplyTo());
>                    replyDestination = message.getJMSReplyTo();
>                    logger.info("In new");
>                 }else{
>                 replyDestination = (Destination)
> destinationMap.get(message.getJMSReplyTo().hashCode());
>                 logger.info("in already");
>                 }
>
>      MessageProducer replyProducer =
> session.createProducer(replyDestination);
>                                 TextMessage replyMessage =
> session.createTextMessage();
>                                 replyMessage.setText(contents);
>
> replyMessage.setJMSCorrelationID(requestMessage.getJMSMessageID());
>                                 replyProducer.send(replyMessage);
>                         }
>                 }catch (JMSException ex) {
>                         logger.fatal("Failing while reading the message from
> queue"+ex.getMessage(),ex);
>                 }catch (Exception e) {
>                         logger.fatal("Failing while transforming the
> message"+e.getMessage(),e);
>                 }
>         }
>
> }
>
> --
> View this message in context: http://www.nabble.com/Performance-Issue-tf2841698.html#a7934436
> Sent from the ActiveMQ - Dev mailing list archive at Nabble.com.
>
>


-- 
Regards,
Hiram

Blog: http://hiramchirino.com