lundi 12 novembre 2012

How to use perfharness for routes Camel & ActiveMQ


Use Performance Harness for JMS

§   This is the same tool that the WebSphere Message Broker and WebSphere MQ teams use when measuring the products.
§   Available to download on Alphaworks: http://www.alphaworks.ibm.com/tech/perfharness
§   Supports testing JMS, MQ, HTTP, SOAP
§   The tool provides:
Throttled operation (fixed rate or number of messages)
Multiple destinations
Live performance reporting
JNDI
Non JNDI for IBM JMS Providers

Running Perfharness

§   Requires Java 5 minimum
§   Set min and max heap size for the tool: -ms256M -mx256M
§   You have to put all jars of perharness in %ActiveMQ_HOME%\examples\perfharness

Example Output:

Sender1: START
rateR=3137.33,threads=1
rateR=4488.75,threads=1
rateR=4621.33,threads=1
rateR=4680.78,threads=1
rateR=4683.67,threads=1
rateR=4693.88,threads=1
rateR=4683.56,threads=1
Sender1: STOP
totalIterations=128133,avgDuration=26.53,maxrateR=4683.56
ControlThread1: STOP

The first case: Find the max rate for sending messages in a named queue and receiving messages from a named queue.

Sender.bat:

Module to measure “-tc jms.r11.Sender” sends messages to a named queue destination “-d dynamicQueues/testqueue”.
The message referenced in this batch file “Sender.bat” is persistent “-pp”, and transacted “-tx”.

java -cp "..\..\activemq-all-5.3.0-fuse-01-00.jar;./perfharness.jar" JMSPerfHarness -pc JNDI -ii org.apache.activemq.jndi.ActiveMQInitialContextFactory -iu tcp://localhost:61616?jms.useAsyncSend=true -cf ConnectionFactory -d dynamicQueues/testqueue -tc jms.r11.Sender -nt 1 -us system -pw manager -tx true -pp true

Receiver.bat:

Module to measure “-tc jms.r11.Receiver” receives messages from a named queue destination “-d dynamicQueues/testqueue”.
The message referenced in this batch file “Receiver.bat” is persistent “-pp”, and transacted “-tx”.

java -cp "..\..\activemq-all-5.3.0-fuse-01-00.jar;./perfharness.jar" JMSPerfHarness -pc JNDI -ii org.apache.activemq.jndi.ActiveMQInitialContextFactory -iu tcp://localhost:61616 -cf ConnectionFactory -d dynamicQueues/testqueue -tc jms.r11.Receiver -nt 1 -us system -pw manager -tx true -pp true

The second case: Find the max rate for my route camel.

If we consider this following route camel: the input is the queue orders and the output is the queue orderstatus.



We can find the max rate of this route camel, by sending a message in the queue “orders” and then waits for a reply on the output queue “orderstatus” with a matching CorrelationId.
The message referenced in this batch file “Req_Reply.bat” is persistent “-pp”, transacted “-tx” and contains a JMS Header “-pf”, and the Body “-mf”.
The tool will run for 120 secs “-rl” and print stats every 5 seconds “-ss”.


Req_Reply.bat

set BROKER_URL=tcp://localhost:61616?jms.useAsyncSend=true
set USER=system
set PASSWORD=manager
set QUEUE_OUT=dynamicQueues/orders
set QUEUE_IN=dynamicQueues/orderstatus
REM -nt Number of producer threads
set NT=1
java -cp "..\..\activemq-all-5.3.0-fuse-01-00.jar;./perfharness.jar" JMSPerfHarness -pc JNDI -ii org.apache.activemq.jndi.ActiveMQInitialContextFactory -iu %BROKER_URL% -cf ConnectionFactory -tc jms.r11.Requestor -iq %QUEUE_OUT% -oq %QUEUE_IN% -to 30000 -pf C:\Dev\tools\bench\InputMessages\JMSProperties.txt -mf C:\Dev\tools\bench\InputMessages\messageBody.xml -nt %NT% -ss 5 -rl 120 -pp true -tx true -us %USER% -pw %PASSWORD%


Enjoy !!