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.

Reply via email to