Performance

Performance Test Results

Contents

  1. Summary
  2. Publish-Subscribe Test

1. Summary

OpenAMQ has been recorded as transferring 140-150K messages per second, sustained over ten seconds, in the following scenario:

  • one publisher, 64 subscribers
  • full fanout from publisher to all subscribers
  • messages of 500 bytes large
  • publisher and server running on an 8-way Opteron
  • subscribers all running on a 4-way Opteron
  • server load around 60-70%, client load around 90%
  • systems connected via gigabit ethernet

Please note that this figure is for aggregate performance of the broker, i.e. a total of all incoming and outgoing messages passing through the broker.

2. Publish-Subscribe Test

Application Configuration

The publisher and subscribers are written as PAL scripts:

The command used to start the subscribers is:

./run_many.sh 64 ./topic_subscribe -s [server address and port]

And the command used to start the publisher is:

./topic_publish -z 500 -S 64 -M 100000

Software Configuration

The tests were conducted using this software configuration:

  • OpenAMQ server 1.0c2
  • Multithreaded release build
  • Direct memory allocator
  • Operating system: Linux Red Hat Enterprise Linux 4

Hardware Configuration

The server and publisher were run on an 8-way Opteron. The subscribers were run on a 4-way Opteron. The two servers were connected via gigabit ethernet networking.

Supporting Scripts

This is the run_many.sh script used to start the clients:

#!/bin/sh
if [ $# -lt 2  ]; then
    echo "usage: run_many.sh NUMCLIENTS COMMAND [client options]"
    exit 1
fi
NUMCLIENTS=$1
shift
COMMAND=$1
shift
for client in `yes | head -${NUMCLIENTS}`; do
    ${COMMAND} "$@" &
done

Performance FAQ

  • What is the fastest build? Answer: on a multiprocesser server: mt,release. On a single-CPU server: st,release.
  • Is OpenAMQ still too slow? Answer: yes. We feel it should be getting about 200K+ messages per second on the above configuration, with more horsepower to run test clients, and further tuning of the I/O layers.