This is an automated email from the ASF dual-hosted git repository.

jbarrett pushed a commit to branch develop
in repository https://gitbox.apache.org/repos/asf/geode-benchmarks.git


The following commit(s) were added to refs/heads/develop by this push:
     new d85f08e  Adds more command line configuration options. (#112)
d85f08e is described below

commit d85f08ef45d80f2b5b23adfc5677d3ee36360b52
Author: Jacob Barrett <[email protected]>
AuthorDate: Mon Sep 30 09:58:18 2019 -0700

    Adds more command line configuration options. (#112)
    
    * Support for selection GC from CMS, G1, Shenandoah, or Z.
    * Support for specifying JMV heap size.
    
    * Refactors JVM argument configuration.
    * Improved new GC logging
---
 README.md                                          |   2 +
 build.gradle                                       |   2 +-
 geode-benchmarks/build.gradle                      |  22 ++--
 .../benchmark/parameters/GcImplementation.java     |  20 ++++
 .../benchmark/parameters/GcLoggingParameters.java  |  48 ++++++++
 .../geode/benchmark/parameters/GcParameters.java   |  87 ++++++++++++++
 .../geode/benchmark/parameters/HeapParameters.java |  34 ++++++
 .../geode/benchmark/parameters/JVMParameters.java  |  48 --------
 .../geode/benchmark/parameters/JavaVersion.java    |  45 +++++++
 .../geode/benchmark/parameters/JvmParameters.java  |  40 +++++++
 .../benchmark/parameters/ProfilerParameters.java   |  37 ++++++
 .../apache/geode/benchmark/parameters/Utils.java   |  31 +++++
 .../benchmark/topology/ClientServerTopology.java   |  25 ++--
 .../parameters/GcLoggingParametersTest.java        |  97 ++++++++++++++++
 .../benchmark/parameters/GcParametersTest.java     | 129 +++++++++++++++++++++
 .../benchmark/parameters/HeapParametersTest.java   |  71 ++++++++++++
 .../topology/ClientServerTopologyTest.java         |  36 ++----
 gradle/rat.gradle                                  |   2 -
 .../apache/geode/perftest/analysis/Analyzer.java   |   7 +-
 .../infrastructure/ssh/SshInfrastructure.java      |  42 +++++--
 .../apache/geode/perftest/jvms/JVMLauncher.java    |   1 -
 .../analysis/YardstickThroughputSensorParser.java  |   9 +-
 .../YardstickThroughputSensorParserTest.java       |   5 +-
 infrastructure/scripts/aws/run_tests.sh            |   6 +-
 24 files changed, 728 insertions(+), 118 deletions(-)

diff --git a/README.md b/README.md
index 3fad270..a5c97d7 100644
--- a/README.md
+++ b/README.md
@@ -53,6 +53,8 @@ Options:
     -PtestJVM             : Path to an alternative JVM for running the client, 
locator, and servers. If not specified JAVA_HOME will be used. Note all 
compilation tasks will still use JAVA_HOME.
     -PwithSsl             : Flag to run geode with SSL. A self-signed 
certificate will be generated at runtime.
     -PwithSecurityManager : Flag to start Geode with the example 
implementation of SecurityManager
+    -PwithGc              : Select which GC to use. Valid values CMS 
(default), G1, Z.
+    -PwithHeap            : Specify how large a heap the benchmark VMs should 
use, default "8g". Accepts any `-Xmx` value, like "32g".
     --tests               : Specific benchmarks to run 
(--tests=PartitionedPutBenchmark)
     -d                    : Debug
     -i                    : Info
diff --git a/build.gradle b/build.gradle
index 516cde4..bfa96ce 100644
--- a/build.gradle
+++ b/build.gradle
@@ -24,7 +24,7 @@ buildscript {
 }
 
 
-plugins { id "org.nosphere.apache.rat" version "0.3.1" }
+plugins { id "org.nosphere.apache.rat" version "0.5.2" }
 
 apply plugin: 'com.bmuschko.docker-remote-api'
 
diff --git a/geode-benchmarks/build.gradle b/geode-benchmarks/build.gradle
index 3b80ea7..cb40a38 100644
--- a/geode-benchmarks/build.gradle
+++ b/geode-benchmarks/build.gradle
@@ -36,17 +36,19 @@ repositories {
 }
 
 dependencies {
-  compile(group: 'org.junit.jupiter', name: 'junit-jupiter-engine', version: 
project.'junit-jupiter-engine.version')
-  compile(group: 'org.junit-pioneer', name: 'junit-pioneer', version: 
project.'junit-pioneer.version')
-  compile(group: 'org.apache.geode', name: 'geode-core', version: geodeVersion)
-  compile(group: 'org.slf4j', name: 'slf4j-simple', version: 
project.'slf4j-simple.version')
-  compile(project(':harness'))
+  implementation(group: 'org.junit.jupiter', name: 'junit-jupiter-engine', 
version: project.'junit-jupiter-engine.version')
+  implementation(group: 'org.junit-pioneer', name: 'junit-pioneer', version: 
project.'junit-pioneer.version')
+  implementation(group: 'org.slf4j', name: 'slf4j-simple', version: 
project.'slf4j-simple.version')
+  implementation(project(':harness'))
+
+  implementation(group: 'org.apache.geode', name: 'geode-core', version: 
geodeVersion)
 
   // Required for missing dependency on geode-core.
   runtime(group: 'org.eclipse.jetty', name: 'jetty-webapp', version: 
'9.4.12.v20180830')
+  runtime(group: 'org.apache.logging.log4j', name: 'log4j-core', version: 
'2.12.0')
 
-  testCompile(group: 'org.mockito', name: 'mockito-all', version: 
project.'mockito-all.version')
-  testCompile(group: 'org.assertj', name: 'assertj-core', version: 
project.'assertj-core.version')
+  testImplementation(group: 'org.mockito', name: 'mockito-all', version: 
project.'mockito-all.version')
+  testImplementation(group: 'org.assertj', name: 'assertj-core', version: 
project.'assertj-core.version')
 }
 
 test{ useJUnitPlatform() }
@@ -69,6 +71,12 @@ task benchmark(type: Test) {
   systemProperty 'TEST_HOSTS', project.findProperty('hosts')
   systemProperty 'TEST_METADATA', project.findProperty('metadata')
   systemProperty 'OUTPUT_DIR', outputDir
+  if (project.hasProperty('withGc')) {
+    systemProperty 'withGc', project.findProperty('withGc')
+  }
+  if (project.hasProperty('withHeap')) {
+    systemProperty 'withHeap', project.findProperty('withHeap')
+  }
   systemProperty 'withSsl', project.hasProperty('withSsl')
   systemProperty 'withSecurityManager', 
project.hasProperty('withSecurityManager')
   systemProperty 'benchmark.profiler.argument', 
project.findProperty('benchmark.profiler.argument')
diff --git 
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/GcImplementation.java
 
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/GcImplementation.java
new file mode 100644
index 0000000..922ff51
--- /dev/null
+++ 
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/GcImplementation.java
@@ -0,0 +1,20 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license
+ * agreements. See the NOTICE file distributed with this work for additional 
information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache 
License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the 
License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express
+ * or implied. See the License for the specific language governing permissions 
and limitations under
+ * the License.
+ */
+
+package org.apache.geode.benchmark.parameters;
+
+public enum GcImplementation {
+  CMS, G1, Z, Shenandoah;
+}
diff --git 
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/GcLoggingParameters.java
 
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/GcLoggingParameters.java
new file mode 100644
index 0000000..9ea990f
--- /dev/null
+++ 
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/GcLoggingParameters.java
@@ -0,0 +1,48 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license
+ * agreements. See the NOTICE file distributed with this work for additional 
information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache 
License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the 
License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express
+ * or implied. See the License for the specific language governing permissions 
and limitations under
+ * the License.
+ */
+
+package org.apache.geode.benchmark.parameters;
+
+import static org.apache.geode.benchmark.parameters.JavaVersion.v11;
+import static org.apache.geode.benchmark.parameters.Utils.configureAll;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.geode.perftest.TestConfig;
+
+public class GcLoggingParameters {
+  private static final Logger logger = 
LoggerFactory.getLogger(GcLoggingParameters.class);
+
+  public static void configure(final TestConfig testConfig) {
+    final JavaVersion javaVersion = JavaVersion.current();
+    logger.info("Configuring GC logging parameters for Java {}.", javaVersion);
+    if (javaVersion.atLeast(v11)) {
+      configureAll(testConfig, "-Xlog:gc*:OUTPUT_DIR/gc.log");
+    } else {
+      configureAll(testConfig,
+          "-XX:+PrintGCDetails",
+          "-XX:+PrintGCTimeStamps",
+          "-XX:+PrintGCDateStamps",
+          "-XX:+PrintGCApplicationStoppedTime",
+          "-XX:+PrintGCApplicationConcurrentTime",
+          "-XX:+UseGCLogFileRotation",
+          "-XX:NumberOfGCLogFiles=20",
+          "-XX:GCLogFileSize=1M",
+          "-Xloggc:OUTPUT_DIR/gc.log");
+    }
+  }
+
+}
diff --git 
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/GcParameters.java
 
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/GcParameters.java
new file mode 100644
index 0000000..3fc1470
--- /dev/null
+++ 
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/GcParameters.java
@@ -0,0 +1,87 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license
+ * agreements. See the NOTICE file distributed with this work for additional 
information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache 
License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the 
License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express
+ * or implied. See the License for the specific language governing permissions 
and limitations under
+ * the License.
+ */
+
+package org.apache.geode.benchmark.parameters;
+
+import static org.apache.geode.benchmark.parameters.JavaVersion.v11;
+import static org.apache.geode.benchmark.parameters.Utils.configureAll;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.geode.perftest.TestConfig;
+
+public class GcParameters {
+  private static final Logger logger = 
LoggerFactory.getLogger(GcParameters.class);
+
+  public static void configure(final TestConfig testConfig) {
+    final GcImplementation gcImplementation =
+        GcImplementation.valueOf(System.getProperty("withGc", "CMS"));
+    logger.info("Configuring {} GC.", gcImplementation);
+    switch (gcImplementation) {
+      case CMS:
+        configureCms(testConfig);
+        break;
+      case G1:
+        configureG1(testConfig);
+        break;
+      case Z:
+        configureZ(testConfig);
+        break;
+      case Shenandoah:
+        configureShenandoah(testConfig);
+        break;
+    }
+  }
+
+  private static void configureShenandoah(final TestConfig testConfig) {
+    configureAll(testConfig,
+        "-XX:+UnlockExperimentalVMOptions",
+        "-XX:+UseShenandoahGC",
+        "-XX:+AlwaysPreTouch",
+        "-XX:+UseNUMA");
+  }
+
+  private static void configureZ(final TestConfig testConfig) {
+    final JavaVersion javaVersion = JavaVersion.current();
+    if (javaVersion.olderThan(v11)) {
+      throw new IllegalArgumentException("ZGC requires Java 11 or newer");
+    }
+    configureAll(testConfig,
+        "-XX:+UnlockExperimentalVMOptions",
+        "-XX:+UseZGC");
+  }
+
+  private static void configureG1(final TestConfig testConfig) {
+    configureAll(testConfig,
+        "-XX:+UseG1GC",
+        "-XX:+UseNUMA",
+        "-XX:+ScavengeBeforeFullGC");
+  }
+
+  private static void configureCms(final TestConfig testConfig) {
+    configureAll(testConfig,
+        "-XX:+UseConcMarkSweepGC",
+        "-XX:+UseCMSInitiatingOccupancyOnly",
+        "-XX:+CMSClassUnloadingEnabled",
+        "-XX:+CMSScavengeBeforeRemark",
+        "-XX:CMSInitiatingOccupancyFraction=60",
+        "-XX:+UseNUMA",
+        "-XX:+ScavengeBeforeFullGC",
+        "-XX:+UnlockDiagnosticVMOptions",
+        "-XX:ParGCCardsPerStrideChunk=32768");
+  }
+
+}
diff --git 
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/HeapParameters.java
 
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/HeapParameters.java
new file mode 100644
index 0000000..0ef39c6
--- /dev/null
+++ 
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/HeapParameters.java
@@ -0,0 +1,34 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license
+ * agreements. See the NOTICE file distributed with this work for additional 
information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache 
License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the 
License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express
+ * or implied. See the License for the specific language governing permissions 
and limitations under
+ * the License.
+ */
+
+package org.apache.geode.benchmark.parameters;
+
+import static org.apache.geode.benchmark.parameters.Utils.configureAll;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.geode.perftest.TestConfig;
+
+public class HeapParameters {
+  private static final Logger logger = 
LoggerFactory.getLogger(HeapParameters.class);
+
+  public static void configure(final TestConfig testConfig) {
+    final String heap = System.getProperty("withHeap", "8g");
+    logger.info("Configuring heap parameters {}.", heap);
+    configureAll(testConfig, "-Xmx" + heap, "-Xms" + heap);
+  }
+
+}
diff --git 
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/JVMParameters.java
 
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/JVMParameters.java
deleted file mode 100644
index 5c4bdc7..0000000
--- 
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/JVMParameters.java
+++ /dev/null
@@ -1,48 +0,0 @@
-/*
- * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license
- * agreements. See the NOTICE file distributed with this work for additional 
information regarding
- * copyright ownership. The ASF licenses this file to You under the Apache 
License, Version 2.0 (the
- * "License"); you may not use this file except in compliance with the 
License. You may obtain a
- * copy of the License at
- *
- * http://www.apache.org/licenses/LICENSE-2.0
- *
- * Unless required by applicable law or agreed to in writing, software 
distributed under the License
- * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express
- * or implied. See the License for the specific language governing permissions 
and limitations under
- * the License.
- */
-package org.apache.geode.benchmark.parameters;
-
-public class JVMParameters {
-  public static final String[] JVM_ARGS = new String[] {
-      "-XX:CMSInitiatingOccupancyFraction=60",
-      "-XX:+UnlockDiagnosticVMOptions",
-      "-XX:ParGCCardsPerStrideChunk=32768",
-      "-XX:+UseNUMA",
-      "-XX:+UseConcMarkSweepGC",
-      "-XX:+UseCMSInitiatingOccupancyOnly",
-      "-XX:+CMSClassUnloadingEnabled",
-      "-XX:+DisableExplicitGC",
-      "-XX:+ScavengeBeforeFullGC",
-      "-XX:+CMSScavengeBeforeRemark",
-      "-server",
-      "-Djava.awt.headless=true",
-      "-Dsun.rmi.dgc.server.gcInterval=9223372036854775806",
-      "-Dgemfire.OSProcess.ENABLE_OUTPUT_REDIRECTION=true",
-      "-Dgemfire.launcher.registerSignalHandlers=true",
-      "-Xmx8g",
-      "-Xms8g"
-  };
-  public static final String[] JVM8_ARGS = new String[] {
-      "-XX:+PrintGCDetails",
-      "-XX:+PrintGCTimeStamps",
-      "-XX:+PrintGCDateStamps",
-      "-XX:+PrintGCApplicationStoppedTime",
-      "-XX:+PrintGCApplicationConcurrentTime",
-      "-XX:+UseGCLogFileRotation",
-      "-XX:NumberOfGCLogFiles=20",
-      "-XX:GCLogFileSize=1M"
-  };
-
-}
diff --git 
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/JavaVersion.java
 
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/JavaVersion.java
new file mode 100644
index 0000000..ffa4175
--- /dev/null
+++ 
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/JavaVersion.java
@@ -0,0 +1,45 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license
+ * agreements. See the NOTICE file distributed with this work for additional 
information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache 
License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the 
License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express
+ * or implied. See the License for the specific language governing permissions 
and limitations under
+ * the License.
+ */
+
+package org.apache.geode.benchmark.parameters;
+
+public enum JavaVersion {
+  v8, v11, v12, v13;
+
+  public static JavaVersion current() {
+    return valueOfVersion(System.getProperty("java.runtime.version"));
+  }
+
+  private static JavaVersion valueOfVersion(final String javaVersion) {
+    if (javaVersion.startsWith("1.8")) {
+      return v8;
+    } else if (javaVersion.startsWith("11.")) {
+      return v11;
+    } else if (javaVersion.startsWith("12.")) {
+      return v12;
+    } else if (javaVersion.matches("^13\\b.*")) {
+      return v13;
+    }
+    throw new IllegalStateException("Unknown version " + javaVersion);
+  }
+
+  public boolean atLeast(final JavaVersion other) {
+    return this.compareTo(other) >= 0;
+  }
+
+  public boolean olderThan(final JavaVersion other) {
+    return this.compareTo(other) < 0;
+  }
+}
diff --git 
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/JvmParameters.java
 
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/JvmParameters.java
new file mode 100644
index 0000000..3705fbe
--- /dev/null
+++ 
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/JvmParameters.java
@@ -0,0 +1,40 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license
+ * agreements. See the NOTICE file distributed with this work for additional 
information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache 
License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the 
License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express
+ * or implied. See the License for the specific language governing permissions 
and limitations under
+ * the License.
+ */
+
+package org.apache.geode.benchmark.parameters;
+
+import static org.apache.geode.benchmark.parameters.Utils.configureAll;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.geode.perftest.TestConfig;
+
+public class JvmParameters {
+  private static final Logger logger = 
LoggerFactory.getLogger(JvmParameters.class);
+
+  public static void configure(final TestConfig testConfig) {
+    logger.info("Configuring JVM parameters.");
+
+    configureAll(testConfig,
+        "-server",
+        "-Djava.awt.headless=true",
+        "-Dsun.rmi.dgc.server.gcInterval=9223372036854775806",
+        "-Dgemfire.OSProcess.ENABLE_OUTPUT_REDIRECTION=true",
+        "-Dgemfire.launcher.registerSignalHandlers=true",
+        "-XX:+DisableExplicitGC");
+  }
+
+}
diff --git 
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/ProfilerParameters.java
 
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/ProfilerParameters.java
new file mode 100644
index 0000000..5f8fdcf
--- /dev/null
+++ 
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/ProfilerParameters.java
@@ -0,0 +1,37 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license
+ * agreements. See the NOTICE file distributed with this work for additional 
information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache 
License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the 
License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express
+ * or implied. See the License for the specific language governing permissions 
and limitations under
+ * the License.
+ */
+
+package org.apache.geode.benchmark.parameters;
+
+import static com.google.common.base.Strings.isNullOrEmpty;
+import static org.apache.geode.benchmark.parameters.Utils.configureAll;
+
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
+
+import org.apache.geode.perftest.TestConfig;
+
+public class ProfilerParameters {
+  private static final Logger logger = 
LoggerFactory.getLogger(ProfilerParameters.class);
+
+  public static void configure(final TestConfig testConfig) {
+    final String profilerArgument = 
System.getProperty("benchmark.profiler.argument");
+    if (!isNullOrEmpty(profilerArgument)) {
+      logger.info("Configuring profiler parameter. {}", profilerArgument);
+      configureAll(testConfig, profilerArgument);
+    }
+  }
+
+}
diff --git 
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/Utils.java
 
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/Utils.java
new file mode 100644
index 0000000..0b06f58
--- /dev/null
+++ 
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/parameters/Utils.java
@@ -0,0 +1,31 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license
+ * agreements. See the NOTICE file distributed with this work for additional 
information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache 
License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the 
License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express
+ * or implied. See the License for the specific language governing permissions 
and limitations under
+ * the License.
+ */
+
+package org.apache.geode.benchmark.parameters;
+
+import static 
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.CLIENT;
+import static 
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.LOCATOR;
+import static 
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.SERVER;
+
+import org.apache.geode.perftest.TestConfig;
+
+public interface Utils {
+
+  static void configureAll(TestConfig testConfig, String... args) {
+    testConfig.jvmArgs(LOCATOR, args);
+    testConfig.jvmArgs(SERVER, args);
+    testConfig.jvmArgs(CLIENT, args);
+  }
+}
diff --git 
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/topology/ClientServerTopology.java
 
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/topology/ClientServerTopology.java
index 384fa92..c04ff9c 100644
--- 
a/geode-benchmarks/src/main/java/org/apache/geode/benchmark/topology/ClientServerTopology.java
+++ 
b/geode-benchmarks/src/main/java/org/apache/geode/benchmark/topology/ClientServerTopology.java
@@ -14,8 +14,6 @@
  */
 package org.apache.geode.benchmark.topology;
 
-import static org.apache.geode.benchmark.parameters.JVMParameters.JVM8_ARGS;
-import static org.apache.geode.benchmark.parameters.JVMParameters.JVM_ARGS;
 import static 
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.CLIENT;
 import static 
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.LOCATOR;
 import static 
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.SERVER;
@@ -24,6 +22,11 @@ import org.bouncycastle.util.Arrays;
 import org.slf4j.Logger;
 import org.slf4j.LoggerFactory;
 
+import org.apache.geode.benchmark.parameters.GcLoggingParameters;
+import org.apache.geode.benchmark.parameters.GcParameters;
+import org.apache.geode.benchmark.parameters.HeapParameters;
+import org.apache.geode.benchmark.parameters.JvmParameters;
+import org.apache.geode.benchmark.parameters.ProfilerParameters;
 import org.apache.geode.benchmark.tasks.StartClient;
 import org.apache.geode.benchmark.tasks.StartLocator;
 import org.apache.geode.benchmark.tasks.StartServer;
@@ -57,17 +60,11 @@ public class ClientServerTopology {
     testConfig.role(SERVER, NUM_SERVERS);
     testConfig.role(CLIENT, NUM_CLIENTS);
 
-    String profilerArgument = 
System.getProperty("benchmark.profiler.argument");
-
-    testConfig.jvmArgs(CLIENT, appendIfNotEmpty(JVM_ARGS, profilerArgument));
-    testConfig.jvmArgs(LOCATOR, appendIfNotEmpty(JVM_ARGS, profilerArgument));
-    testConfig.jvmArgs(SERVER, appendIfNotEmpty(JVM_ARGS, profilerArgument));
-
-    if (System.getProperty("java.runtime.version").startsWith("1.8")) {
-      testConfig.jvmArgs(CLIENT, JVM8_ARGS);
-      testConfig.jvmArgs(LOCATOR, JVM8_ARGS);
-      testConfig.jvmArgs(SERVER, JVM8_ARGS);
-    }
+    JvmParameters.configure(testConfig);
+    HeapParameters.configure(testConfig);
+    GcLoggingParameters.configure(testConfig);
+    GcParameters.configure(testConfig);
+    ProfilerParameters.configure(testConfig);
 
     addToTestConfig(testConfig, "withSsl", WITH_SSL_ARGUMENT);
     addToTestConfig(testConfig, "withSecurityManager", 
WITH_SECURITY_MANAGER_ARGUMENT);
@@ -87,7 +84,7 @@ public class ClientServerTopology {
     }
   }
 
-  private static final String[] appendIfNotEmpty(String[] a, String b) {
+  private static String[] appendIfNotEmpty(String[] a, String b) {
     if (null == b || b.length() == 0) {
       return a;
     }
diff --git 
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/parameters/GcLoggingParametersTest.java
 
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/parameters/GcLoggingParametersTest.java
new file mode 100644
index 0000000..4814603
--- /dev/null
+++ 
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/parameters/GcLoggingParametersTest.java
@@ -0,0 +1,97 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license
+ * agreements. See the NOTICE file distributed with this work for additional 
information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache 
License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the 
License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express
+ * or implied. See the License for the specific language governing permissions 
and limitations under
+ * the License.
+ */
+
+package org.apache.geode.benchmark.parameters;
+
+import static 
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.CLIENT;
+import static 
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.LOCATOR;
+import static 
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.SERVER;
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.Properties;
+
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import org.apache.geode.perftest.TestConfig;
+
+class GcLoggingParametersTest {
+
+  private static final String JAVA_RUNTIME_VERSION = "java.runtime.version";
+
+  private Properties systemProperties;
+
+  @BeforeEach
+  public void beforeEach() {
+    systemProperties = (Properties) System.getProperties().clone();
+  }
+
+  @AfterEach
+  public void afterEach() {
+    System.setProperties(systemProperties);
+  }
+
+  @Test
+  public void withJava8() {
+    System.setProperty(JAVA_RUNTIME_VERSION, "1.8.0_212-b03");
+    final TestConfig testConfig = new TestConfig();
+    GcLoggingParameters.configure(testConfig);
+    assertThatJava8GcLog(testConfig);
+  }
+
+  @Test
+  public void withJava11() {
+    System.setProperty(JAVA_RUNTIME_VERSION, "11.0.4+11");
+    final TestConfig testConfig = new TestConfig();
+    GcLoggingParameters.configure(testConfig);
+    assertThatJava9GcLog(testConfig);
+  }
+
+  @Test
+  public void withJava12() {
+    System.setProperty(JAVA_RUNTIME_VERSION, "12.0.2+10");
+    final TestConfig testConfig = new TestConfig();
+    GcLoggingParameters.configure(testConfig);
+    assertThatJava9GcLog(testConfig);
+  }
+
+  @Test
+  public void withJava13() {
+    System.setProperty(JAVA_RUNTIME_VERSION, "13+33");
+    final TestConfig testConfig = new TestConfig();
+    GcLoggingParameters.configure(testConfig);
+    assertThatJava9GcLog(testConfig);
+  }
+
+  private void assertThatJava8GcLog(TestConfig testConfig) {
+    
assertThat(testConfig.getJvmArgs().get(CLIENT)).contains("-Xloggc:OUTPUT_DIR/gc.log");
+    
assertThat(testConfig.getJvmArgs().get(SERVER)).contains("-Xloggc:OUTPUT_DIR/gc.log");
+    
assertThat(testConfig.getJvmArgs().get(LOCATOR)).contains("-Xloggc:OUTPUT_DIR/gc.log");
+    
assertThat(testConfig.getJvmArgs().get(CLIENT)).doesNotContain("-Xlog:gc:OUTPUT_DIR/gc.log");
+    
assertThat(testConfig.getJvmArgs().get(SERVER)).doesNotContain("-Xlog:gc:OUTPUT_DIR/gc.log");
+    
assertThat(testConfig.getJvmArgs().get(LOCATOR)).doesNotContain("-Xlog:gc:OUTPUT_DIR/gc.log");
+  }
+
+  private void assertThatJava9GcLog(TestConfig testConfig) {
+    
assertThat(testConfig.getJvmArgs().get(CLIENT)).contains("-Xlog:gc*:OUTPUT_DIR/gc.log");
+    
assertThat(testConfig.getJvmArgs().get(SERVER)).contains("-Xlog:gc*:OUTPUT_DIR/gc.log");
+    
assertThat(testConfig.getJvmArgs().get(LOCATOR)).contains("-Xlog:gc*:OUTPUT_DIR/gc.log");
+    
assertThat(testConfig.getJvmArgs().get(CLIENT)).doesNotContain("-Xloggc:OUTPUT_DIR/gc.log");
+    
assertThat(testConfig.getJvmArgs().get(SERVER)).doesNotContain("-Xloggc:OUTPUT_DIR/gc.log");
+    
assertThat(testConfig.getJvmArgs().get(LOCATOR)).doesNotContain("-Xloggc:OUTPUT_DIR/gc.log");
+  }
+
+}
diff --git 
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/parameters/GcParametersTest.java
 
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/parameters/GcParametersTest.java
new file mode 100644
index 0000000..e3f4bc6
--- /dev/null
+++ 
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/parameters/GcParametersTest.java
@@ -0,0 +1,129 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license
+ * agreements. See the NOTICE file distributed with this work for additional 
information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache 
License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the 
License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express
+ * or implied. See the License for the specific language governing permissions 
and limitations under
+ * the License.
+ */
+
+package org.apache.geode.benchmark.parameters;
+
+import static 
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.CLIENT;
+import static 
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.LOCATOR;
+import static 
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.SERVER;
+import static org.assertj.core.api.Assertions.assertThat;
+import static org.assertj.core.api.Assertions.assertThatThrownBy;
+
+import java.util.Properties;
+
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import org.apache.geode.perftest.TestConfig;
+
+class GcParametersTest {
+  private static final String WITH_GC = "withGc";
+  private static final String JAVA_RUNTIME_VERSION = "java.runtime.version";
+  private static final String XX_USE_ZGC = "-XX:+UseZGC";
+  private static final String XX_USE_G_1_GC = "-XX:+UseG1GC";
+  private static final String XX_USE_CONC_MARK_SWEEP_GC = 
"-XX:+UseConcMarkSweepGC";
+
+  private Properties systemProperties;
+
+  @BeforeEach
+  public void beforeEach() {
+    systemProperties = (Properties) System.getProperties().clone();
+  }
+
+  @AfterEach
+  public void afterEach() {
+    System.setProperties(systemProperties);
+  }
+
+  @Test
+  public void withDefault() {
+    System.clearProperty(WITH_GC);
+    final TestConfig testConfig = new TestConfig();
+    GcParameters.configure(testConfig);
+    assertCms(testConfig);
+  }
+
+  @Test
+  public void withCms() {
+    System.setProperty(WITH_GC, "CMS");
+    final TestConfig testConfig = new TestConfig();
+    GcParameters.configure(testConfig);
+    assertCms(testConfig);
+  }
+
+  @Test
+  public void withG1() {
+    System.setProperty(WITH_GC, "G1");
+    final TestConfig testConfig = new TestConfig();
+    GcParameters.configure(testConfig);
+    assertG1(testConfig);
+  }
+
+  @Test
+  public void withZ() {
+    System.setProperty(WITH_GC, "Z");
+    System.setProperty(JAVA_RUNTIME_VERSION, "11.0.4+11");
+    final TestConfig testConfig = new TestConfig();
+    GcParameters.configure(testConfig);
+    assertZ(testConfig);
+  }
+
+  @Test
+  public void withZinJava8() {
+    System.setProperty(WITH_GC, "Z");
+    System.setProperty(JAVA_RUNTIME_VERSION, "1.8.0_212-b03");
+    final TestConfig testConfig = new TestConfig();
+    assertThatThrownBy(() -> GcParameters.configure(testConfig))
+        .isInstanceOf(IllegalArgumentException.class);
+  }
+
+  private void assertCms(TestConfig testConfig) {
+    
assertThat(testConfig.getJvmArgs().get(CLIENT)).contains(XX_USE_CONC_MARK_SWEEP_GC);
+    
assertThat(testConfig.getJvmArgs().get(SERVER)).contains(XX_USE_CONC_MARK_SWEEP_GC);
+    
assertThat(testConfig.getJvmArgs().get(LOCATOR)).contains(XX_USE_CONC_MARK_SWEEP_GC);
+    
assertThat(testConfig.getJvmArgs().get(CLIENT)).doesNotContain(XX_USE_G_1_GC);
+    
assertThat(testConfig.getJvmArgs().get(SERVER)).doesNotContain(XX_USE_G_1_GC);
+    
assertThat(testConfig.getJvmArgs().get(LOCATOR)).doesNotContain(XX_USE_G_1_GC);
+    assertThat(testConfig.getJvmArgs().get(CLIENT)).doesNotContain(XX_USE_ZGC);
+    assertThat(testConfig.getJvmArgs().get(SERVER)).doesNotContain(XX_USE_ZGC);
+    
assertThat(testConfig.getJvmArgs().get(LOCATOR)).doesNotContain(XX_USE_ZGC);
+  }
+
+  private void assertG1(TestConfig testConfig) {
+    assertThat(testConfig.getJvmArgs().get(CLIENT)).contains(XX_USE_G_1_GC);
+    assertThat(testConfig.getJvmArgs().get(SERVER)).contains(XX_USE_G_1_GC);
+    assertThat(testConfig.getJvmArgs().get(LOCATOR)).contains(XX_USE_G_1_GC);
+    
assertThat(testConfig.getJvmArgs().get(CLIENT)).doesNotContain(XX_USE_CONC_MARK_SWEEP_GC);
+    
assertThat(testConfig.getJvmArgs().get(SERVER)).doesNotContain(XX_USE_CONC_MARK_SWEEP_GC);
+    
assertThat(testConfig.getJvmArgs().get(LOCATOR)).doesNotContain(XX_USE_CONC_MARK_SWEEP_GC);
+    assertThat(testConfig.getJvmArgs().get(CLIENT)).doesNotContain(XX_USE_ZGC);
+    assertThat(testConfig.getJvmArgs().get(SERVER)).doesNotContain(XX_USE_ZGC);
+    
assertThat(testConfig.getJvmArgs().get(LOCATOR)).doesNotContain(XX_USE_ZGC);
+  }
+
+  private void assertZ(TestConfig testConfig) {
+    assertThat(testConfig.getJvmArgs().get(CLIENT)).contains(XX_USE_ZGC);
+    assertThat(testConfig.getJvmArgs().get(SERVER)).contains(XX_USE_ZGC);
+    assertThat(testConfig.getJvmArgs().get(LOCATOR)).contains(XX_USE_ZGC);
+    
assertThat(testConfig.getJvmArgs().get(CLIENT)).doesNotContain(XX_USE_CONC_MARK_SWEEP_GC);
+    
assertThat(testConfig.getJvmArgs().get(SERVER)).doesNotContain(XX_USE_CONC_MARK_SWEEP_GC);
+    
assertThat(testConfig.getJvmArgs().get(LOCATOR)).doesNotContain(XX_USE_CONC_MARK_SWEEP_GC);
+    
assertThat(testConfig.getJvmArgs().get(CLIENT)).doesNotContain(XX_USE_G_1_GC);
+    
assertThat(testConfig.getJvmArgs().get(SERVER)).doesNotContain(XX_USE_G_1_GC);
+    
assertThat(testConfig.getJvmArgs().get(LOCATOR)).doesNotContain(XX_USE_G_1_GC);
+  }
+
+}
diff --git 
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/parameters/HeapParametersTest.java
 
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/parameters/HeapParametersTest.java
new file mode 100644
index 0000000..9a06408
--- /dev/null
+++ 
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/parameters/HeapParametersTest.java
@@ -0,0 +1,71 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one or more 
contributor license
+ * agreements. See the NOTICE file distributed with this work for additional 
information regarding
+ * copyright ownership. The ASF licenses this file to You under the Apache 
License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance with the 
License. You may obtain a
+ * copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software 
distributed under the License
+ * is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY 
KIND, either express
+ * or implied. See the License for the specific language governing permissions 
and limitations under
+ * the License.
+ */
+
+package org.apache.geode.benchmark.parameters;
+
+import static 
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.CLIENT;
+import static 
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.LOCATOR;
+import static 
org.apache.geode.benchmark.topology.ClientServerTopology.Roles.SERVER;
+import static org.assertj.core.api.Assertions.assertThat;
+
+import java.util.Properties;
+
+import org.junit.jupiter.api.AfterEach;
+import org.junit.jupiter.api.BeforeEach;
+import org.junit.jupiter.api.Test;
+
+import org.apache.geode.perftest.TestConfig;
+
+class HeapParametersTest {
+
+  private static final String WITH_HEAP = "withHeap";
+
+  private Properties systemProperties;
+
+  @BeforeEach
+  public void beforeEach() {
+    systemProperties = (Properties) System.getProperties().clone();
+  }
+
+  @AfterEach
+  public void afterEach() {
+    System.setProperties(systemProperties);
+  }
+
+  @Test
+  public void withDefault() {
+    System.clearProperty(WITH_HEAP);
+    final TestConfig testConfig = new TestConfig();
+    HeapParameters.configure(testConfig);
+    assertHeap(testConfig, "8g");
+  }
+
+  @Test
+  public void with16g() {
+    System.setProperty(WITH_HEAP, "16g");
+    final TestConfig testConfig = new TestConfig();
+    HeapParameters.configure(testConfig);
+    assertHeap(testConfig, "16g");
+  }
+
+  private void assertHeap(final TestConfig testConfig, final String heap) {
+    assertThat(testConfig.getJvmArgs().get(CLIENT)).contains("-Xmx" + heap);
+    assertThat(testConfig.getJvmArgs().get(SERVER)).contains("-Xmx" + heap);
+    assertThat(testConfig.getJvmArgs().get(LOCATOR)).contains("-Xmx" + heap);
+    assertThat(testConfig.getJvmArgs().get(CLIENT)).contains("-Xms" + heap);
+    assertThat(testConfig.getJvmArgs().get(SERVER)).contains("-Xms" + heap);
+    assertThat(testConfig.getJvmArgs().get(LOCATOR)).contains("-Xms" + heap);
+  }
+}
diff --git 
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/topology/ClientServerTopologyTest.java
 
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/topology/ClientServerTopologyTest.java
index fe5aa64..684929d 100644
--- 
a/geode-benchmarks/src/test/java/org/apache/geode/benchmark/topology/ClientServerTopologyTest.java
+++ 
b/geode-benchmarks/src/test/java/org/apache/geode/benchmark/topology/ClientServerTopologyTest.java
@@ -16,10 +16,10 @@
 package org.apache.geode.benchmark.topology;
 
 
-import static org.apache.geode.benchmark.parameters.JVMParameters.JVM8_ARGS;
-import static org.apache.geode.benchmark.parameters.JVMParameters.JVM_ARGS;
 import static org.assertj.core.api.Assertions.assertThat;
 
+import java.util.Properties;
+
 import org.junit.jupiter.api.AfterEach;
 import org.junit.jupiter.api.BeforeEach;
 import org.junit.jupiter.api.Test;
@@ -28,12 +28,16 @@ import org.apache.geode.perftest.TestConfig;
 
 public class ClientServerTopologyTest {
 
+  private Properties systemProperties;
 
   @BeforeEach
+  public void beforeEach() {
+    systemProperties = (Properties) System.getProperties().clone();
+  }
+
   @AfterEach
-  public void clearProperties() {
-    System.clearProperty("withSsl");
-    System.clearProperty("withSecurityManager");
+  public void afterEach() {
+    System.setProperties(systemProperties);
   }
 
   @Test
@@ -52,22 +56,6 @@ public class ClientServerTopologyTest {
   }
 
   @Test
-  public void configWithJava8() {
-    System.setProperty("java.runtime.version", "1.8.0_212");
-    TestConfig testConfig = new TestConfig();
-    ClientServerTopology.configure(testConfig);
-    assertThat(testConfig.getJvmArgs().get("client")).contains(JVM8_ARGS);
-  }
-
-  @Test
-  public void configWithJava9() {
-    System.setProperty("java.runtime.version", "9.0.1");
-    TestConfig testConfig = new TestConfig();
-    ClientServerTopology.configure(testConfig);
-    
assertThat(testConfig.getJvmArgs().get("client")).doesNotContain(JVM8_ARGS);
-  }
-
-  @Test
   public void configWithoutSecurityManager() {
     TestConfig testConfig = new TestConfig();
     ClientServerTopology.configure(testConfig);
@@ -83,9 +71,9 @@ public class ClientServerTopologyTest {
   }
 
   @Test
-  public void configWithSecurityManagerAndSslAndJava9() {
+  public void configWithSecurityManagerAndSslAndJava11() {
     System.setProperty("withSecurityManager", "true");
-    System.setProperty("java.runtime.version", "9.0.1");
+    System.setProperty("java.runtime.version", "11.0.4+11");
     System.setProperty("withSsl", "true");
     TestConfig testConfig = new TestConfig();
 
@@ -93,7 +81,5 @@ public class ClientServerTopologyTest {
 
     
assertThat(testConfig.getJvmArgs().get("client")).contains("-DwithSecurityManager=true");
     
assertThat(testConfig.getJvmArgs().get("client")).contains("-DwithSsl=true");
-    assertThat(testConfig.getJvmArgs().get("client")).contains(JVM_ARGS);
-    
assertThat(testConfig.getJvmArgs().get("client")).doesNotContain(JVM8_ARGS);
   }
 }
diff --git a/gradle/rat.gradle b/gradle/rat.gradle
index 1b23e69..e78d996 100644
--- a/gradle/rat.gradle
+++ b/gradle/rat.gradle
@@ -70,5 +70,3 @@ rat {
     '**/*.cfg',
   ]
 }
-
-subprojects { check.dependsOn rat }
diff --git 
a/harness/src/main/java/org/apache/geode/perftest/analysis/Analyzer.java 
b/harness/src/main/java/org/apache/geode/perftest/analysis/Analyzer.java
index d3853dc..13a90cc 100644
--- a/harness/src/main/java/org/apache/geode/perftest/analysis/Analyzer.java
+++ b/harness/src/main/java/org/apache/geode/perftest/analysis/Analyzer.java
@@ -14,6 +14,8 @@
  */
 package org.apache.geode.perftest.analysis;
 
+import static java.lang.Double.isNaN;
+
 import java.io.File;
 import java.io.IOException;
 import java.io.PrintWriter;
@@ -74,7 +76,10 @@ public class Analyzer {
     for (BenchmarkRunResult.BenchmarkResult benchmarkResult : 
benchmarkRunResult
         .getBenchmarkResults()) {
       for (BenchmarkRunResult.ProbeResult probeResult : 
benchmarkResult.probeResults) {
-        if (probeResult.description.equals("average latency")) {
+        if (isNaN(probeResult.baseline) || isNaN(probeResult.test)) {
+          errorMessage.append("BENCHMARK FAILED: 
").append(benchmarkResult.name)
+              .append(" missing result file.\n");
+        } else if (probeResult.description.equals("average latency")) {
           if (probeResult.getDifference() > 0) {
             isHighWaterCandidate = false;
             if (probeResult.getDifference() >= 0.05) {
diff --git 
a/harness/src/main/java/org/apache/geode/perftest/infrastructure/ssh/SshInfrastructure.java
 
b/harness/src/main/java/org/apache/geode/perftest/infrastructure/ssh/SshInfrastructure.java
index 645e2b1..16765de 100644
--- 
a/harness/src/main/java/org/apache/geode/perftest/infrastructure/ssh/SshInfrastructure.java
+++ 
b/harness/src/main/java/org/apache/geode/perftest/infrastructure/ssh/SshInfrastructure.java
@@ -40,6 +40,7 @@ import net.schmizz.sshj.Config;
 import net.schmizz.sshj.DefaultConfig;
 import net.schmizz.sshj.SSHClient;
 import net.schmizz.sshj.connection.channel.direct.Session;
+import net.schmizz.sshj.connection.channel.direct.Signal;
 import net.schmizz.sshj.transport.verification.PromiscuousVerifier;
 import net.schmizz.sshj.xfer.FileSystemFile;
 import org.slf4j.Logger;
@@ -82,24 +83,41 @@ public class SshInfrastructure implements Infrastructure {
   }
 
   @Override
-  public int onNode(Node node, String[] shellCommand)
-      throws IOException {
-    try (SSHClient client = getSSHClient(node.getAddress())) {
-
-      String script = "'" + String.join("' '", shellCommand) + "'";
-
-      try (Session session = client.startSession()) {
-        logger.info("Executing " + script + " on " + node.getAddress());
-        final Session.Command cmd = session.exec(script);
-        CompletableFuture<Void> copyStdout =
+  public int onNode(final Node node, final String[] shellCommand) throws 
IOException {
+    try (final SSHClient client = getSSHClient(node.getAddress());
+        final Session session = client.startSession()) {
+      final String script = "'" + String.join("' '", shellCommand) + "'";
+      logger.info("Executing {} on {}", script, node.getAddress());
+      try (final Session.Command cmd = session.exec(script)) {
+        final CompletableFuture<Void> copyStdout =
             copyStreamAsynchronously(cmd.getInputStream(), System.out);
-        CompletableFuture<Void> copyStdErr =
+        final CompletableFuture<Void> copyStdErr =
             copyStreamAsynchronously(cmd.getErrorStream(), System.err);
 
         cmd.join();
         copyStdout.join();
         copyStdErr.join();
-        return cmd.getExitStatus();
+
+        final Boolean coreDumped = cmd.getExitWasCoreDumped();
+        if (null != coreDumped && coreDumped) {
+          logger.error("Core dumped for {} on {}", script, node.getAddress());
+        }
+        final String errorMessage = cmd.getExitErrorMessage();
+        if (null != errorMessage) {
+          logger.error("Exit error message for {} on {} was \"{}\"", script, 
node.getAddress(),
+              errorMessage);
+        }
+        final Signal exitSignal = cmd.getExitSignal();
+        if (null != exitSignal) {
+          logger.error("Exit signal for {} on {} was {}", script, 
node.getAddress(), exitSignal);
+        }
+
+        final Integer exitStatus = cmd.getExitStatus();
+        if (null == exitStatus) {
+          logger.error("Exit status for {} on {} was null", script, 
node.getAddress());
+          return -1;
+        }
+        return exitStatus;
       }
     }
   }
diff --git 
a/harness/src/main/java/org/apache/geode/perftest/jvms/JVMLauncher.java 
b/harness/src/main/java/org/apache/geode/perftest/jvms/JVMLauncher.java
index 1a675c6..6b5cfce 100644
--- a/harness/src/main/java/org/apache/geode/perftest/jvms/JVMLauncher.java
+++ b/harness/src/main/java/org/apache/geode/perftest/jvms/JVMLauncher.java
@@ -99,7 +99,6 @@ class JVMLauncher {
           "-Dgemfire." + SSL_TRUSTSTORE + "=" + jvmConfig.getLibDir() + 
"/temp-self-signed.jks");
       command.add("-Dgemfire." + SSL_TRUSTSTORE_PASSWORD + "=123456");
     }
-    command.add("-Xloggc:" + jvmConfig.getOutputDir() + "/gc.log");
     command.addAll(replaceTokens(jvmConfig.getJvmArgs(), jvmConfig));
     command.add(ChildJVM.class.getName());
 
diff --git 
a/harness/src/main/java/org/apache/geode/perftest/yardstick/analysis/YardstickThroughputSensorParser.java
 
b/harness/src/main/java/org/apache/geode/perftest/yardstick/analysis/YardstickThroughputSensorParser.java
index c873c8c..75612ba 100644
--- 
a/harness/src/main/java/org/apache/geode/perftest/yardstick/analysis/YardstickThroughputSensorParser.java
+++ 
b/harness/src/main/java/org/apache/geode/perftest/yardstick/analysis/YardstickThroughputSensorParser.java
@@ -21,6 +21,8 @@ import java.io.IOException;
 import java.util.ArrayList;
 import java.util.List;
 
+import org.slf4j.Logger;
+import org.slf4j.LoggerFactory;
 import org.yardstickframework.probes.ThroughputLatencyProbe;
 
 import org.apache.geode.perftest.analysis.ProbeResultParser;
@@ -30,6 +32,8 @@ import org.apache.geode.perftest.analysis.ProbeResultParser;
  * reports the average throughput in operations/second.
  */
 public class YardstickThroughputSensorParser implements ProbeResultParser {
+  private static final Logger logger =
+      LoggerFactory.getLogger(YardstickThroughputSensorParser.class);
   public static final String sensorOutputFile = "ThroughputLatencyProbe.csv";
   public static final String probeResultDescription = "average ops/second";
 
@@ -37,8 +41,7 @@ public class YardstickThroughputSensorParser implements 
ProbeResultParser {
 
   public void parseResults(File resultDir) throws IOException {
     File sensorData = new File(resultDir, sensorOutputFile);
-    try (FileReader fileReader = new FileReader(sensorData);
-        BufferedReader dataStream = new BufferedReader(new 
FileReader(sensorData))) {
+    try (BufferedReader dataStream = new BufferedReader(new 
FileReader(sensorData))) {
       String nextLine;
 
       while ((nextLine = dataStream.readLine()) != null) {
@@ -49,6 +52,8 @@ public class YardstickThroughputSensorParser implements 
ProbeResultParser {
         }
         datapoints.add(new SensorDatapoint(nextLine));
       }
+    } catch (java.io.FileNotFoundException e) {
+      logger.warn("Result file {} missing.", sensorData, e);
     }
   }
 
diff --git 
a/harness/src/test/java/org/apache/geode/perftest/yardstick/analysis/YardstickThroughputSensorParserTest.java
 
b/harness/src/test/java/org/apache/geode/perftest/yardstick/analysis/YardstickThroughputSensorParserTest.java
index b8e6285..27e5d28 100644
--- 
a/harness/src/test/java/org/apache/geode/perftest/yardstick/analysis/YardstickThroughputSensorParserTest.java
+++ 
b/harness/src/test/java/org/apache/geode/perftest/yardstick/analysis/YardstickThroughputSensorParserTest.java
@@ -65,11 +65,12 @@ public class YardstickThroughputSensorParserTest {
   }
 
   @Test
-  public void throwsExceptionOnMissingFile() throws IOException {
+  public void doesNotThrowExceptionOnMissingFile() throws IOException {
     final File testFolder = temporaryFolder.resolve("testFolder").toFile();
     assertTrue(testFolder.mkdirs());
     YardstickThroughputSensorParser parser = new 
YardstickThroughputSensorParser();
-    assertThrows(IOException.class, () -> parser.parseResults(testFolder));
+    parser.parseResults(testFolder);
+    assertEquals(3, parser.getProbeResults().size());
   }
 
   @Test
diff --git a/infrastructure/scripts/aws/run_tests.sh 
b/infrastructure/scripts/aws/run_tests.sh
index 032ecea..6dd7b25 100755
--- a/infrastructure/scripts/aws/run_tests.sh
+++ b/infrastructure/scripts/aws/run_tests.sh
@@ -131,8 +131,8 @@ fi
 fixRepoName() {
   if [ -z "$1" ]; then
     return 1
-  elif [ ${1:0:5} = "https" ]; then
-    echo ${1}
+  elif [ "${1:0:5}" = "https" ] || [ "${1:0:4}" = "git@" ]; then
+    echo "${1}"
   else
     echo "https://github.com/${1}";
   fi
@@ -157,7 +157,7 @@ if [[ -z "${VERSION}" ]]; then
 
   ssh ${SSH_OPTIONS} geode@$FIRST_INSTANCE "\
     rm -rf geode && \
-    git clone ${REPO} && \
+    git clone ${REPO} geode && \
     cd geode && git checkout ${BRANCH}"
 
   set +e

Reply via email to