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.