Author: foconer
Date: Wed Jun 7 02:24:10 2006
New Revision: 412342
URL: http://svn.apache.org/viewvc?rev=412342&view=rev
Log:
Added all System properties in the generated report xml file and also included
a readme.txt that contains information on how to use the performance test
module.
Added:
incubator/activemq/trunk/activemq-perftest/readme.txt
Modified:
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/PerfReportGenerator.java
Added: incubator/activemq/trunk/activemq-perftest/readme.txt
URL:
http://svn.apache.org/viewvc/incubator/activemq/trunk/activemq-perftest/readme.txt?rev=412342&view=auto
==============================================================================
--- incubator/activemq/trunk/activemq-perftest/readme.txt (added)
+++ incubator/activemq/trunk/activemq-perftest/readme.txt Wed Jun 7 02:24:10
2006
@@ -0,0 +1,267 @@
+####################################################################################################
+# Running Maven 2 Performance Test
+####################################################################################################
+Goals | Description
+-----------------------|----------------------------------------------------------
+ activemq-perf:broker | Starts broker using the activemq configuration file
located in
+ | "src\main\resources\broker-conf" where the default
config is
+ | activemq.xml.
+ |
+ | Parameters:
+ | 1. -DconfigType - specifies the type of
configuration to use.
+ | Its value must be one of the
filename in the
+ | "..\broker-config" directory
(e.g. -DconfigType=kaha).
+ | 2. -DconfigFile - path to config file other than
those in
+ | "src\..\broker-config".
+ | (e.g
-DconfigFile=c:\dir\activemq.xml)
+ |
+ activemq-perf:consumer| Starts the consumer's performance testing.
+ |
+ activemq-perf:producer| Starts the producer's performance testing.
+ |
+ | * Note: The parameters for both consumer and
producers are described on
+ | the next section. Also, the generated report is
stored in the directory
+ | specified in the parameter
"sysTest.reportDirectory".
+ |
+
+####################################################################################################
+# Configuration for running a system of JMS Clients (Producer/Consumer)
+####################################################################################################
+Configuration Key | Default Value | Description
+-------------------------|------------------|----------------------------------------------------------
+ sysTest.numClients | 1 | Specifies the number of JMS
Clients to start.
+ | |
+ sysTest.totalDests | 1 | Specifies the total number of
destinations to use for the
+ | | whole system test.
+ | |
+ sysTest.destDistro | all | Specifies how to distribute the
destinations to the
+ | | clients. Available values are
(Invalid value will result
+ | | to using the default value
'all')*:
+ | | 'all' - All clients will
send/receive to all destinations.
+ | | i.e. if there are 2
producers and 5 destinations,
+ | | each producer will send a
message to each
+ | | individual destination.
+ | | 'equal' - Clients will equally
divide the destinations
+ | | among themselves. i.e.
if there are 2 producers and
+ | | 5 destinations, each
producer will send messages to
+ | | 2 destinations. The
fifth destination will not be
+ | | used.
+ | | 'divide' - Clients will divide
the destinations among
+ | | themselves regardless
of equality. i.e. if there
+ | | are 2 producers and 5
destinations, producer 1 will
+ | | send to 3 destinations,
while producer 2 will send
+ | | to 2 destinations.
+ | |
+ sysTest.reportDirectory | target/perf-test | The directory where the sampler
report will be saved.
+ | |
+
+* Note: If the number of destinations is less than the number of clients and
the distribution type is
+ either 'equal' or 'divide', each client will send/receive from only one
destination, distributing the
+ destinations among the clients. i.e. if there are 5 producers and 2
destinations, 3 producers will
+ send to destination 1, and 2 producers will send to destination 2. Also, a
consumer can only receive from
+ a single destination, unless composite destination is supported and
specified.
+
+####################################################################################################
+# Configuration for running a JMS Producer
+####################################################################################################
+Configuration Key | Default Value | Description
+-------------------------|---------------|----------------------------------------------------------
+ producer.spiClass | null | The service provider interface
class that allows the
+ | | client to create a generic
connection factory. Current
+ | | available SPI classes include:
+ | | 1.
'org.apache.activemq.tool.ActiveMQPojoSPI'
+ | | 2.
'org.apache.activemq.tool.ActiveMQClassLoaderSPI'
+ | |
+ producer.sessTransacted | false | Specifies if the session created
will be transacted or
+ | | not. See the JMS Specifications for
more details.
+ | |
+ producer.sessAckMode | autoAck | Specified the acknowledge mode of
the session. See the
+ | | JMS Specifications for more
details. Available values are:
+ | | 1. 'autoAck' -
Session.AUTO_ACKNOWLEDGE
+ | | 2. 'clientAck' -
Session.CLIENT_ACKNOWLEDGE
+ | | 3. 'dupsAck' -
Session.DUPS_OK_ACKNOWLEDGE
+ | | 4. 'transacted' -
Session.TRANSACTED
+ | |
+ producer.destName | TEST.FOO | The prefix of the destination name
to use. To specify a
+ | | queue, prefix the destination name
with 'queue://', for
+ | | topics, prefix the destination with
'topic://'. If no
+ | | prefix is specified, a topic will
be created.
+ | |
+ producer.destCount | 1 | The number of destinations assigned
to this client.*
+ | |
+ producer.destIndex | 0 | The starting index of the
destination name. i.e. if
+ | | destName='TEST.FOO', destCount=3,
destIndex=3, 3 topics
+ | | will be created with names,
TEST.FOO.3, TEST.FOO.4,
+ | | TEST.FOO.5.*
+ | |
+ producer.destComposite | false | If there are more than one
destination, and destComposite=
+ | | true, the destinations will be
merged into one. This
+ | | assumes that the provider supports
composite destinations.
+ | |
+ producer.messageSize | 1024 bytes | The size of each text message to
send.
+ | |
+ producer.sendType | time | Send either time-based or
message-count-based. Available
+ | | values are:
+ | | 1. 'time' - keep sending messages
until a specific
+ | | interval of time elapses.
+ | | 2. 'count' - keep sending messages
until N messages has
+ | | been sent.
+ | |
+ producer.sendCount | 1000000 msgs | If sendType=count, send this number
of messages.
+ | (1 million) |
+ | |
+ producer.sendDuration | 300000 ms | If sendType=time, send messages for
this number of
+ | (5 mins) | milliseconds.
+ | |
+
+* Note: If you are using the Producer JMS System to create the producers, you
need not bother with
+ these settings, as this will be overwritten by the destination distribution
method. i.e. if you
+ specify 2 producers, 5 destinations, and equal distribution, producer 1 will
have a destCount=2
+ and a destIndex=0, while producer 2 will have a destCount=2, and a
destIndex=2. Any previous value
+ will be overwritten.
+
+####################################################################################################
+# Configuration for running a JMS Consumer
+####################################################################################################
+Configuration Key | Default Value | Description
+-------------------------|--------------------|-----------------------------------------------------
+ consumer.spiClass | null | The service provider interface
class that allows the
+ | | client to create a generic
connection factory.
+ | | Current available SPI classes
include:
+ | | 1.
'org.apache.activemq.tool.ActiveMQPojoSPI'
+ | | 2.
'org.apache.activemq.tool.ActiveMQClassLoaderSPI'
+ | |
+ consumer.sessTransacted | false | Specifies if the session
created will be transacted
+ | | or not. See the JMS
Specifications for more details.
+ | |
+ consumer.sessAckMode | autoAck | Specified the acknowledge mode
of the session. See the
+ | | JMS Specifications for more
details. Available values
+ | | are:
+ | | 1. 'autoAck' -
Session.AUTO_ACKNOWLEDGE
+ | | 2. 'clientAck' -
Session.CLIENT_ACKNOWLEDGE
+ | | 3. 'dupsAck' -
Session.DUPS_OK_ACKNOWLEDGE
+ | | 4. 'transacted' -
Session.TRANSACTED
+ | |
+ consumer.destName | TEST.FOO | The prefix of the destination
name to use. To
+ | | specify a queue, prefix the
destination name with
+ | | 'queue://', for topics, prefix
the destination with
+ | | 'topic://'. If no prefix is
specified, a topic will
+ | | be created.
+ | |
+ consumer.destCount | 1 | The number of destinations
assigned to this client.*
+ | |
+ consumer.destIndex | 0 | The starting index of the
destination name. i.e. if
+ | | destName='TEST.FOO',
destCount=3, destIndex=3,
+ | | 3 topics will be created with
names, TEST.FOO.3,
+ | | TEST.FOO.4, TEST.FOO.5.*
+ | |
+ consumer.destComposite | false | If there are more than one
destination, and
+ | | destComposite=true, the
destinations will be merged
+ | | into one. This assumes that
the provider supports
+ | | composite destinations.
+ | |
+ consumer.durable | false | If true, create a durable
subscriber, otherwise
+ | | create a message consumer. See
the JMS Specifications
+ | | for more details.
+ | |
+ consumer.asyncRecv | true | If true, asynchronously
receive messages using the
+ | | onMessage() method, otherwise
use the receive()
+ | | method.
+ | |
+ consumer.consumerName | TestConsumerClient | Prefix that will be use for
the subscription of the
+ | | consumer. Generally used for
durable subscriber.
+ | |
+ consumer.recvType | time | Receive either time-based or
message-count-based.
+ | | Available values are:
+ | | 1. 'time' - keep receiving
messages until a
+ | | specific time interval has
elapsed.
+ | | 2. 'count' - keep receiving
until N messages
+ | has been received.
+ | |
+ consumer.recvCount | 1000000 msgs | If recvType=count, receive
this much messages.
+ | (1 million) |
+ | |
+ consumer.recvType | 300000 ms | If recvType=time, receive
messages for this specific
+ | (5 mins) | time duration.
+ | |
+
+* Note: If you are using the Consumer JMS System to create the consumers, you
need not bother with
+ these settings, as this will be overwritten by the destination distribution
method. i.e. if you
+ specify 2 consumer, 5 destinations, and equal distribution, consumer 1 will
have a destCount=2
+ and a destIndex=0, while consumer 2 will have a destCount=2, and a
destIndex=2. Any previous value
+ will be overwritten. Although, it should be noted that unless composite
destination is supported
+ and specified, each consumer will choose only one destination to receive
from.
+
+####################################################################################################
+# Configuration for SPI Connection Factory:
org.apache.activemq.tool.spi.ActiveMQPojoSPI
+# Description: This provides details in configuring the JMS Connection Factory
created by
+# ActiveMQPojoSPI. Default values are based from the default
values of the service
+# provider org.apache.activemq.ActiveMQConnectionFactory.
+####################################################################################################
+
+Configuration Key | Default Value | Description
+--------------------------|-----------------------|--------------------------------------------------
+ factory.brokerUrl | tcp://localhost:61616 | The url of the broker the
client will connect to.
+ | |
+ factory.username | null | Username on the connection
to use.
+ | |
+ factory.password | null | Password on the connection
to use.
+ | |
+ factory.clientID | null | Client ID the connection
will use. If none is
+ | | specified, it will be
automatically generated.
+ | |
+ factory.asyncSend | false | If true, asynchronously
send messages
+ | |
+ factory.asyncDispatch | false | If true, asynchronously
dispatch messages
+ | |
+ factory.asyncSession | true | If true, session will
dispatch messages
+ | | asynchronously.
+ | |
+ factory.closeTimeout | 15000 ms |
+ | |
+ factory.copyMsgOnSend | true | If true, creates a copy of
the message to be sent
+ | |
+ factory.disableTimestamp | false | If true, disable the
setting of the JMSTimestamp.
+ | |
+ factory.deferObjSerial | false | If true, defer the
serialization of message objects.
+ | |
+ factory.onSendPrepMsg | true | If true, prepare a message
before sending it.
+ | |
+ factory.optimAck | true | If true, optimizes the
acknowledgement of messages.
+ | |
+ factory.optimDispatch | true | If true, optimizes the
dispatching of messages.
+ | |
+ factory.prefetchQueue | 1000 messages | Number of messages a queue
consumer will cache
+ | | in RAM before processing
it.
+ | |
+ factory.prefetchTopic | 32766 messages | Number of messages a topic
consumer will cache
+ | | in RAM before processing
it.
+ | |
+ factory.useCompression | false | If true, compress message
data.
+ | |
+ factory.useRetroactive | false | If true, make consumers
retroactive.
+ | |
+
+
+####################################################################################################
+# Configuration for SPI Connection Factory:
org.apache.activemq.tool.spi.ActiveMQClassLoaderSPI
+# Description: This provides details in configuring the JMS Connection Factory
created by
+# ActiveMQClassLoaderSPI. Default values are based from the
default values of the
+# service provider org.apache.activemq.ActiveMQConnectionFactory.
+####################################################################################################
+
+ActiveMQClassLoaderSPI loads from the classpath
"org.apache.activemq.ActiveMQConnectionFactory" and
+configures it using reflection. Configuration is generally based on the API of
the class loaded.
+General format is factory.YYY or factory.XXX.YYY, where the last variable
(YYY) is the property to
+set and everything in between is the getter of the class to use to set (YYY).
For example:
+
+1. To set the value for asyncSend in ActiveMQConnectionFactory, use:
+ factory.useAsyncSend=true, which is equivalent to calling
factory.setUseAsyncSend(true);
+
+2. To set the queue prefetch for ActiveMQConnectionFactory, use:
+ factory.prefetchPolicy.queuePrefetch=1, which is equivalent to calling
+ factory.getPrefetchPolicy().setQueuePrefetch(1);
+
+It should be noted that the loaded class should implement the appropriate
getter and setter methods.
+Nested objects should also be properly instantiated. For more information on
configuring this SPI,
+refer to the specific provider API manual.
\ No newline at end of file
Modified:
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/PerfReportGenerator.java
URL:
http://svn.apache.org/viewvc/incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/PerfReportGenerator.java?rev=412342&r1=412341&r2=412342&view=diff
==============================================================================
---
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/PerfReportGenerator.java
(original)
+++
incubator/activemq/trunk/tooling/maven-activemq-perf-plugin/src/main/java/org/apache/activemq/tool/PerfReportGenerator.java
Wed Jun 7 02:24:10 2006
@@ -77,24 +77,34 @@
writer.println("<test-report>");
writer.println("<test-information>");
- writer.println("<os-name>" + System.getProperty("os.name") +
"</os-name>");
- writer.println("<java-version>" + System.getProperty("java.version") +
"</java-version>");
+ Enumeration keys;
+ String key;
- if (this.getTestSettings() != null) {
- Enumeration keys = getTestSettings().propertyNames();
+ // Add system property settings
+ writer.println("<system-settings>");
+
+ Properties sysProp = System.getProperties();
+ keys = sysProp.keys();
+
+ while (keys.hasMoreElements()) {
+ key = (String) keys.nextElement();
+ writer.println("<" + key + ">" + getTestSettings().get(key) + "</"
+ key + ">");
+ }
+
+ writer.println("</system-settings>");
- writer.println("<client-settings>");
+ // Add client property settings
+ writer.println("<client-settings>");
+
+ if (this.getTestSettings() != null) {
+ keys = getTestSettings().propertyNames();
- String key;
- String key2;
while (keys.hasMoreElements()) {
key = (String) keys.nextElement();
- key2 = key.substring(key.indexOf(".") + 1);
- writer.println("<" + key2 + ">" + getTestSettings().get(key) +
"</" + key2 + ">");
+ writer.println("<" + key + ">" + getTestSettings().get(key) +
"</" + key + ">");
}
-
- writer.println("</client-settings>");
}
+ writer.println("</client-settings>");
writer.println("</test-information>");
writer.println("<test-result>");
@@ -103,7 +113,6 @@
public PrintWriter getWriter() {
return this.writer;
}
-
public String getReportDirectory() {
return reportDirectory;