Justin, Here are the answers to your questions:
1) How specifically have you been using the ActiveMQ Class Performance Module? 15 producers pushing 1MB messages against 60 queues with 4 consumers getting messages from these queues over 60-minute test runs. On the producer we set the sysTest.numClients to 15 producers and sysTest.totalDests to 60 queues and producer.messageSize to 1048576. On the consumer we set the sysTest.numClients to 4 consumers and sysTest.totalDests to 60 queues and set consumer.destComposite to true (so messages get consumed from all TEST.FOO.* queues). We then kick off the producer on one box and the consumer on another box using the commands below: mvn activemq-perf:consumer -Dfactory.brokerURL=tcp://host:port mvn activemq-perf:producer -Dfactory.brokerURL=tcp://host:port I do think we are running too many threads/clients on the producer and consumer boxes which are on separate VMs. There’s just not enough cores to produce and consume all that. The broker is a dedicated box running ActiveMQ Classic 6.1.5. 2) Are you absolutely sure you need to support this amount of data? Would it be possible, for example, to compress the data before you send it? No, and I am attempting to get further clarification on this. I think this situation can happen from time to time in bursts, and I am looking into if we can compress the data before it is sent. The compression time of the data would need to be very brief as this has to be fast. 3) Can you elaborate on what changes you've made and what effect those changes have had? The following changes have given us very marginal (no affect) performance: * We tried increasing the tcpSendBufferSize and tcpReceiveBufferSize from 1MB to 2MB on the acceptor: <acceptors> … <acceptor name="artemis">tcp://0.0.0.0:61616?tcpSendBufferSize=1048576;tcpReceiveBufferSize=1048576… … </acceptors> * We do not have the option to put the message journal on its own physical volume which I am suggesting that we do. * Increased journal-min-files is set to 2 and then in increments of powers of 2 (4, 8, and 16). * Set journal-pool-files which defaults to -1 meaning that no files are deleted during cleanup. * Set the journal-type to ASYNCIO instead of NIO. * Increased journal-max-io to 1000 with the ASYNCIO change mentioned above. * Increased journal-file-size to 20M, but typically 10M is good for most systems. The configuration would look like the following in broker.xml: <configuration> <core> ... <persistence-enabled>true</persistence-enabled> <journal-type>ASYNCIO</journal-type> <bindings-directory>./data/bindings</bindings-directory> <journal-directory>./data/journal</journal-directory> <journal-datasync>true</journal-datasync> <journal-min-files>4</journal-min-files> <journal-pool-files>-1</journal-pool-files> <journal-device-block-size>4096</journal-device-block-size> <journal-file-size>20M</journal-file-size> <journal-buffer-timeout>12000</journal-buffer-timeout> <journal-max-io>1000</journal-max-io> ... </core> </configuration> Regards, William Crowell This e-mail may contain information that is privileged or confidential. If you are not the intended recipient, please delete the e-mail and any attachments and notify us immediately.