| The qpid-perftests distributed JMS test framework |
| ================================================= |
| |
| This folder contains the distributed test (aka Perf Test) framework written for |
| testing the performance of a JMS provider. Although it was written for the |
| purpose of testing Qpid, it can be used to test the performance of any JMS |
| provider with minimal configuration changes. |
| |
| This document explains how to use the framework. |
| |
| |
| How it works |
| ------------ |
| |
| First, you need to run a message broker. This can be Qpid, ActiveMQ etc. All |
| messages are sent using the JMS API. |
| |
| Then run a Perf Test Controller, providing the details of the test in either or |
| a JSON or Javascript file. This specifies details about the messages to send, |
| how many connections and sessions to use etc. There are a lot of options |
| available - see the .js and .json files under this folder for examples. |
| |
| Now run one or more Perf Test Client processes. These will be responsible for |
| sending/receiving the messages once the test starts. For convenience, you can |
| instead configure the Controller to start clients in-process. The clients and |
| the controller communicate using queues on the message broker. |
| |
| The test results are written to CSV files. |
| |
| You can use the qpid-perftests-visualisation tool to create charts from the CSV files. |
| |
| Example usage |
| ------------- |
| |
| The etc/ folder contains shell scripts that can be used to run the performance |
| tests and visualise the results. It also contains sub-folders for test config |
| and chart definitions. |
| |
| Instructions |
| ------------ |
| |
| 1. Extract the archive |
| |
| 2. cd into the etc/ folder |
| |
| 3. Start your JMS broker |
| |
| 4. To run the Controller and clients in a single process, run the following |
| command: |
| |
| java -cp ".:../lib/*:/path/to/your-jms-client-jars/*" \ |
| -Dqpid.dest_syntax=BURL \ |
| org.apache.qpid.disttest.ControllerRunner \ |
| jndi-config=perftests-jndi.properties \ |
| test-config=/path/to/test-config.json \ |
| distributed=false |
| |
| Note that the test-config parameter can point at either a JSON or Javascript |
| file, or at a directory (in which case all the .json and .js files in the |
| directory are used. |
| |
| When the test is complete, the CSV files containing the results are written to |
| the current directory. |
| |
| |
| Running the clients in a separate process |
| ----------------------------------------- |
| |
| When using a large number of clients, you may get more representative |
| performance results if the clients are distributed among multiple processes, |
| potentially on multiple machines. To do this: |
| |
| 1. Run the Controller, providing distributed=true. |
| |
| 2. Run your clients (assuming you want to launch 10 logical clients in this |
| process): |
| |
| java -cp ".:../lib/*:/path/to/your-jms-client-jars/*" \ |
| -Dqpid.dest_syntax=BURL \ |
| org.apache.qpid.disttest.ClientRunner \ |
| jndi-config=perftests-jndi.properties \ |
| number-of-clients=10 |
| |
| |
| Caveats for non-Qpid JMS providers |
| ---------------------------------- |
| |
| If you are not using the Qpid broker, you must create one or more queues before |
| running the test. This is necessary because you can't use Qpid's API to create |
| queues on the broker. The queues are: |
| |
| – The controller queue. You can specify the physical name of this in |
| etc/perftests-jndi.properties. This queue is used by the clients to register |
| with the Controller and to send results to it. |
| – the queue(s) used by your JSON test configuration (unless you have configured |
| a vendor-specific queue creator). |
| |
| You must also override the Controller's default queue creator using the system |
| property qpid.disttest.queue.creator.class. Provide the class name of an |
| implementation of org.apache.qpid.disttest.jms.QueueCreator, or |
| org.apache.qpid.disttest.jms.NoOpQueueCreator if you are going to create and |
| delete the queues manually. |
| |
| You can also omit the qpid.dest_syntax system property if your JMS provider is |
| not Qpid. |