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