Test Setup
Clustered Servers
- Start up four AWS instances configured for clustering via the Puppet script
Each server has the following configuration
aws_region = us-east-1 aws_ami = ami-e995e380 aws_instance_type = m1.large aws_block_device_mapping = '/dev/sda1=:10::io1:100' aws_ebs_optimized = true
System Properties
JAVA_OPTS="-server -Xmx2048m -XX:MaxPermSize=256m -Djava.awt.headless=true -XX:+UseConcMarkSweepGC -XX:+CMSClassUnloadingEnabled -XX:+CMSPermGenSweepingEnabled" JAVA_OPTS="${JAVA_OPTS} -Dfcrepo.modeshape.index.location=/opt/fcrepo4-data/mode/indexes" JAVA_OPTS="${JAVA_OPTS} -Dfcrepo.ispn.CacheDirPath=/opt/fcrepo4-data/ispn" JAVA_OPTS="${JAVA_OPTS} -Dfcrepo.ispn.alternative.CacheDirPath=/opt/fcrepo4-data/ispn-alt" JAVA_OPTS="${JAVA_OPTS} -Dfcrepo.ispn.binary.CacheDirPath=/opt/fcrepo4-data/ispn-binary" JAVA_OPTS="${JAVA_OPTS} -Dfcrepo.ispn.binary.alternative.CacheDirPath=/opt/fcrepo4-data/ispn-binary-alt" JAVA_OPTS="${JAVA_OPTS} -Dfcrepo.activemq.dir=/opt/fcrepo4-data/active-mq" JAVA_OPTS="${JAVA_OPTS} -Dcom.arjuna.ats.arjuna.common.ObjectStoreEnvironmentBean.default.objectStoreDir=/opt/fcrepo4-data/object-store-default" JAVA_OPTS="${JAVA_OPTS} -Dcom.arjuna.ats.arjuna.objectstore.objectStoreDir=/opt/fcrepo4-data/object-store" JAVA_OPTS="${JAVA_OPTS} -Dfcrepo.modeshape.configuration=classpath:/config/clustered/repository.json" ### # Clustering ### JAVA_OPTS="${JAVA_OPTS} -Dfcrepo.infinispan.cache_configuration=config/infinispan/clustered/infinispan.xml" JAVA_OPTS="${JAVA_OPTS} -Djgroups.tcp.address=<aws-private-ip>" JAVA_OPTS="${JAVA_OPTS} -Dfcrepo.ispn.numOwners=2 -Djava.net.PreferIPv4Stack=true" # The jgroups-ec2.xml file is included in ispn's jars JAVA_OPTS="${JAVA_OPTS} -Dfcrepo.ispn.jgroups.configuration=jgroups-ec2.xml" # This property overwrites the S3 bucketname variable in jgroups-ec2.xml JAVA_OPTS="${JAVA_OPTS} -Djgroups.s3.bucket=fcrepo4-cluster-0"
- Note: The clustered servers must be started one at a time in order for the cluster to properly form.
- Once the cluster has been established, an Elastic Load Balancer was configured over the four instances.
Client Instance
- Via the AWS console, start a small instance to act as the client to the cluster
Instance configuration
aws_region = us-east-1 aws_ami = ami-e995e380 aws_instance_type = m1.small
SSH into the client instance and install the following packages and utilities:
# Packages sudo apt-get install git tree default-jre-headless -y # Git repos sudo git clone https://github.com/futures/ff-jmeter-testResults.git /opt/ff-jmeter-testResults sudo git clone https://github.com/futures/ff-jmeter-madness.git /opt/ff-jmeter-madness # Copy the lastest /opt/ff-jmeter-testResults/<date> directory to today's date within /opt/ff-jmeter-testResults # Update /opt/ff-jmeter-madness/plans/fedora.jmx as appropriate # Update /opt/ff-jmeter-testResults/<today>/fedora4Test.sh as appropriate # Run test time sudo ./fedora4Test.sh
Test Results
A box plot of Thread count vs Time taken to complete a response
The plot shows the results of two test runs against the 4-node cluster:
- A single thread looping 10,000 times calling jcr:new
- 10,000 requests
- Four threads each looping 10,000 times calling jcr:new
- 40,000 requests