You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@hc.apache.org by ol...@apache.org on 2013/07/03 21:14:58 UTC
svn commit: r1499526 - in
/httpcomponents/benchmark/httpclient/branches/4.2.x: ./
src/main/java/org/apache/http/client/benchmark/
Author: olegk
Date: Wed Jul 3 19:14:57 2013
New Revision: 1499526
URL: http://svn.apache.org/r1499526
Log:
Run each agent in a separate process
Added:
httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/ApacheHttpClient.java (contents, props changed)
- copied, changed from r1499525, httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/TestHttpClient4.java
httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/BenchRunner.java (with props)
httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/Config.java
- copied, changed from r1499525, httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/TestHttpAgent.java
httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/HttpAgent.java (contents, props changed)
- copied, changed from r1499525, httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/TestHttpAgent.java
httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/HttpJRE.java (contents, props changed)
- copied, changed from r1499525, httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/TestHttpJRE.java
httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/JettyHttpClient.java (contents, props changed)
- copied, changed from r1499525, httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/TestJettyHttpClient.java
httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/NingHttpClient.java (contents, props changed)
- copied, changed from r1499525, httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/TestNingHttpClient.java
Removed:
httpcomponents/benchmark/httpclient/branches/4.2.x/pom.xml
httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/TestHttpAgent.java
httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/TestHttpClient4.java
httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/TestHttpJRE.java
httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/TestJettyHttpClient.java
httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/TestNingHttpClient.java
Modified:
httpcomponents/benchmark/httpclient/branches/4.2.x/build.gradle
httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/Benchmark.java
Modified: httpcomponents/benchmark/httpclient/branches/4.2.x/build.gradle
URL: http://svn.apache.org/viewvc/httpcomponents/benchmark/httpclient/branches/4.2.x/build.gradle?rev=1499526&r1=1499525&r2=1499526&view=diff
==============================================================================
--- httpcomponents/benchmark/httpclient/branches/4.2.x/build.gradle (original)
+++ httpcomponents/benchmark/httpclient/branches/4.2.x/build.gradle Wed Jul 3 19:14:57 2013
@@ -1,5 +1,4 @@
apply plugin: 'java'
-apply plugin: 'application'
repositories {
mavenCentral()
@@ -10,17 +9,28 @@ version = '0.1-SNAPSHOT'
sourceCompatibility = '1.6'
dependencies {
+ compile group: 'commons-cli', name: 'commons-cli', version: '1.2'
compile group: 'org.eclipse.jetty', name: 'jetty-server', version: '8.1.7.v20120910'
compile group: 'org.eclipse.jetty', name: 'jetty-client', version: '8.1.7.v20120910'
- compile group: 'org.slf4j', name: 'slf4j-api', version: '1.5.10'
- compile group: 'org.slf4j', name: 'slf4j-nop', version: '1.5.10'
- compile group: 'org.apache.httpcomponents', name: 'httpcore', version: '4.3-beta2'
- compile group: 'org.apache.httpcomponents', name: 'httpcore-nio', version: '4.3-beta2'
- compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.3-beta2'
- compile group: 'org.apache.httpcomponents', name: 'httpasyncclient', version: '4.0-beta4'
- compile group: 'org.apache.httpcomponents', name: 'httpasyncclient', version: '4.0-beta4'
+ compile group: 'org.slf4j', name: 'slf4j-api', version: '1.6.2'
+ compile group: 'org.slf4j', name: 'slf4j-nop', version: '1.6.2'
+ compile group: 'org.apache.httpcomponents', name: 'httpclient', version: '4.2.5'
compile group: 'com.ning', name: 'async-http-client', version: '1.7.12'
}
-mainClassName = 'org.apache.http.client.benchmark.Benchmark'
+task benchmark(dependsOn: 'classes') << {
+ def agents = [
+ 'HttpJRE',
+ 'ApacheHttpClient',
+// 'JettyHttpClient',
+ 'NingHttpClient']
+ agents.each { agent ->
+ javaexec {
+ main = "org.apache.http.client.benchmark.${agent}"
+ classpath = sourceSets.main.runtimeClasspath
+ }
+ sleep(2000)
+ }
+}
+defaultTasks 'clean', 'benchmark'
Copied: httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/ApacheHttpClient.java (from r1499525, httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/TestHttpClient4.java)
URL: http://svn.apache.org/viewvc/httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/ApacheHttpClient.java?p2=httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/ApacheHttpClient.java&p1=httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/TestHttpClient4.java&r1=1499525&r2=1499526&rev=1499526&view=diff
==============================================================================
--- httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/TestHttpClient4.java (original)
+++ httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/ApacheHttpClient.java Wed Jul 3 19:14:57 2013
@@ -50,12 +50,12 @@ import org.apache.http.params.SyncBasicH
import org.apache.http.protocol.HttpContext;
import org.apache.http.util.VersionInfo;
-public class TestHttpClient4 implements TestHttpAgent {
+public class ApacheHttpClient implements HttpAgent {
private final PoolingClientConnectionManager mgr;
private final DefaultHttpClient httpclient;
- public TestHttpClient4() {
+ public ApacheHttpClient() {
super();
HttpParams params = new SyncBasicHttpParams();
params.setParameter(HttpProtocolParams.PROTOCOL_VERSION,
@@ -177,32 +177,12 @@ public class TestHttpClient4 implements
VersionInfo vinfo = VersionInfo.loadVersionInfo("org.apache.http.client",
Thread.currentThread().getContextClassLoader());
return "Apache HttpClient 4 (ver: " +
- ((vinfo != null) ? vinfo.getRelease() : VersionInfo.UNAVAILABLE) + ")";
+ ((vinfo != null) ? vinfo.getRelease() : VersionInfo.UNAVAILABLE) + ")";
}
- public static void main(String[] args) throws Exception {
- if (args.length < 2) {
- System.out.println("Usage: <target URI> <no of requests> <concurrent connections>");
- System.exit(-1);
- }
- URI targetURI = new URI(args[0]);
- int n = Integer.parseInt(args[1]);
- int c = 1;
- if (args.length > 2) {
- c = Integer.parseInt(args[2]);
- }
-
- TestHttpClient4 test = new TestHttpClient4();
- test.init();
- try {
- long startTime = System.currentTimeMillis();
- Stats stats = test.get(targetURI, n, c);
- long finishTime = System.currentTimeMillis();
-
- Stats.printStats(targetURI, startTime, finishTime, stats);
- } finally {
- test.shutdown();
- }
+ public static void main(final String[] args) throws Exception {
+ final Config config = BenchRunner.parseConfig(args);
+ BenchRunner.run(new ApacheHttpClient(), config);
}
}
\ No newline at end of file
Propchange: httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/ApacheHttpClient.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/ApacheHttpClient.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/ApacheHttpClient.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Added: httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/BenchRunner.java
URL: http://svn.apache.org/viewvc/httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/BenchRunner.java?rev=1499526&view=auto
==============================================================================
--- httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/BenchRunner.java (added)
+++ httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/BenchRunner.java Wed Jul 3 19:14:57 2013
@@ -0,0 +1,267 @@
+/*
+ * ====================================================================
+ *
+ * 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.
+ * ====================================================================
+ *
+ * This software consists of voluntary contributions made by many
+ * individuals on behalf of the Apache Software Foundation. For more
+ * information on the Apache Software Foundation, please see
+ * <http://www.apache.org/>.
+ *
+ */
+package org.apache.http.client.benchmark;
+
+import org.apache.commons.cli.CommandLine;
+import org.apache.commons.cli.CommandLineParser;
+import org.apache.commons.cli.HelpFormatter;
+import org.apache.commons.cli.Option;
+import org.apache.commons.cli.Options;
+import org.apache.commons.cli.ParseException;
+import org.apache.commons.cli.PosixParser;
+import org.eclipse.jetty.http.HttpStatus;
+import org.eclipse.jetty.server.Request;
+import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.handler.AbstractHandler;
+import org.eclipse.jetty.server.nio.SelectChannelConnector;
+import org.eclipse.jetty.util.ByteArrayOutputStream2;
+import org.eclipse.jetty.util.IO;
+
+import javax.servlet.ServletException;
+import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.io.Writer;
+import java.net.MalformedURLException;
+import java.net.URI;
+import java.net.URISyntaxException;
+import java.net.URL;
+
+public class BenchRunner {
+
+ public static Config parseConfig(final String[] args) throws ParseException {
+ final Config config = new Config();
+ if (args.length > 0) {
+ final Option kopt = new Option("k", false, "Enable the HTTP KeepAlive feature, " +
+ "i.e., perform multiple requests within one HTTP session. " +
+ "Default is no KeepAlive");
+ kopt.setRequired(false);
+ final Option copt = new Option("c", true, "Concurrency while performing the " +
+ "benchmarking session. The default is to just use a single thread/client");
+ copt.setRequired(false);
+ copt.setArgName("concurrency");
+
+ final Option nopt = new Option("n", true, "Number of requests to perform for the " +
+ "benchmarking session. The default is to just perform a single " +
+ "request which usually leads to non-representative benchmarking " +
+ "results");
+ nopt.setRequired(false);
+ nopt.setArgName("requests");
+
+ final Option lopt = new Option("l", true, "Request content length");
+ nopt.setRequired(false);
+ nopt.setArgName("content length");
+
+ final Options options = new Options();
+ options.addOption(kopt);
+ options.addOption(nopt);
+ options.addOption(copt);
+ options.addOption(lopt);
+
+ final CommandLineParser parser = new PosixParser();
+ final CommandLine cmd = parser.parse(options, args);
+ if (cmd.hasOption('h')) {
+ final HelpFormatter formatter = new HelpFormatter();
+ formatter.printHelp("Benchmark [options]", options);
+ System.exit(1);
+ }
+ if (cmd.hasOption('k')) {
+ config.setKeepAlive(true);
+ }
+ if (cmd.hasOption('c')) {
+ final String s = cmd.getOptionValue('c');
+ try {
+ config.setConcurrency(Integer.parseInt(s));
+ } catch (final NumberFormatException ex) {
+ System.err.println("Invalid number for concurrency: " + s);
+ System.exit(-1);
+ }
+ }
+ if (cmd.hasOption('n')) {
+ final String s = cmd.getOptionValue('n');
+ try {
+ config.setRequests(Integer.parseInt(s));
+ } catch (final NumberFormatException ex) {
+ System.err.println("Invalid number of requests: " + s);
+ System.exit(-1);
+ }
+ }
+ if (cmd.hasOption('l')) {
+ final String s = cmd.getOptionValue('l');
+ try {
+ config.setContentLength(Integer.parseInt(s));
+ } catch (final NumberFormatException ex) {
+ System.err.println("Invalid content length: " + s);
+ System.exit(-1);
+ }
+ }
+ final String[] cmdargs = cmd.getArgs();
+ if (cmdargs.length > 0) {
+ try {
+ config.setUri(new URI(cmdargs[0]));
+ } catch (final URISyntaxException ex) {
+ System.err.println("Invalid request URL : " + cmdargs[0]);
+ System.exit(-1);
+ }
+ }
+
+ } else {
+ config.setKeepAlive(true);
+ config.setRequests(1000000);
+ config.setConcurrency(50);
+ }
+ return config;
+ }
+
+ public static void run(final HttpAgent agent, final Config config) throws Exception {
+ final SelectChannelConnector connector = new SelectChannelConnector();
+ final Server server = new Server();
+ server.addConnector(connector);
+ server.setHandler(new RandomDataHandler());
+
+ server.start();
+ final int port = connector.getLocalPort();
+
+ final byte[] content = new byte[config.getContentLength()];
+ final int r = Math.abs(content.hashCode());
+ for (int i = 0; i < content.length; i++) {
+ content[i] = (byte) ((r + i) % 96 + 32);
+ }
+
+ final URI warmup = new URI("http", null, "localhost", port, "/rnd", "c=2048", null);
+ final URI target = new URI("http", null, "localhost", port, "/echo", null, null);
+
+ try {
+ try {
+ agent.init();
+ // Warm up
+ agent.get(warmup, 500, 2);
+ // Sleep a little
+ Thread.sleep(5000);
+
+ System.out.println("=================================");
+ System.out.println("HTTP agent: " + agent.getClientName());
+ System.out.println("---------------------------------");
+ System.out.println(config.getRequests() + " POST requests");
+ System.out.println("---------------------------------");
+
+ final long startTime = System.currentTimeMillis();
+ final Stats stats = agent.post(target, content, config.getRequests(), config.getConcurrency());
+ final long finishTime = System.currentTimeMillis();
+ Stats.printStats(target, startTime, finishTime, stats);
+ } finally {
+ agent.shutdown();
+ }
+ System.out.println("---------------------------------");
+ } finally {
+ server.stop();
+ }
+ server.join();
+ }
+
+ static class RandomDataHandler extends AbstractHandler {
+
+ public RandomDataHandler() {
+ super();
+ }
+
+ @Override
+ public void handle(
+ final String target,
+ final Request baseRequest,
+ final HttpServletRequest request,
+ final HttpServletResponse response) throws IOException, ServletException {
+ if (target.equals("/rnd")) {
+ rnd(request, response);
+ } else if (target.equals("/echo")) {
+ echo(request, response);
+ } else {
+ response.setStatus(HttpStatus.NOT_FOUND_404);
+ final Writer writer = response.getWriter();
+ writer.write("Target not found: " + target);
+ writer.flush();
+ }
+ }
+
+ private void rnd(
+ final HttpServletRequest request,
+ final HttpServletResponse response) throws IOException {
+ int count = 100;
+ final String s = request.getParameter("c");
+ try {
+ count = Integer.parseInt(s);
+ } catch (final NumberFormatException ex) {
+ response.setStatus(500);
+ final Writer writer = response.getWriter();
+ writer.write("Invalid query format: " + request.getQueryString());
+ writer.flush();
+ return;
+ }
+
+ response.setStatus(200);
+ response.setContentLength(count);
+
+ final OutputStream outstream = response.getOutputStream();
+ final byte[] tmp = new byte[1024];
+ final int r = Math.abs(tmp.hashCode());
+ int remaining = count;
+ while (remaining > 0) {
+ final int chunk = Math.min(tmp.length, remaining);
+ for (int i = 0; i < chunk; i++) {
+ tmp[i] = (byte) ((r + i) % 96 + 32);
+ }
+ outstream.write(tmp, 0, chunk);
+ remaining -= chunk;
+ }
+ outstream.flush();
+ }
+
+ private void echo(
+ final HttpServletRequest request,
+ final HttpServletResponse response) throws IOException {
+
+ final ByteArrayOutputStream2 buffer = new ByteArrayOutputStream2();
+ final InputStream instream = request.getInputStream();
+ if (instream != null) {
+ IO.copy(instream, buffer);
+ buffer.flush();
+ }
+ final byte[] content = buffer.getBuf();
+ final int len = buffer.getCount();
+
+ response.setStatus(200);
+ response.setContentLength(len);
+
+ final OutputStream outstream = response.getOutputStream();
+ outstream.write(content, 0, len);
+ outstream.flush();
+ }
+
+ }
+
+}
Propchange: httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/BenchRunner.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/BenchRunner.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/BenchRunner.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Modified: httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/Benchmark.java
URL: http://svn.apache.org/viewvc/httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/Benchmark.java?rev=1499526&r1=1499525&r2=1499526&view=diff
==============================================================================
--- httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/Benchmark.java (original)
+++ httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/Benchmark.java Wed Jul 3 19:14:57 2013
@@ -25,176 +25,20 @@
*/
package org.apache.http.client.benchmark;
-import java.io.IOException;
-import java.io.InputStream;
-import java.io.OutputStream;
-import java.io.Writer;
-import java.net.URI;
-
-import javax.servlet.ServletException;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpServletResponse;
-
-import org.eclipse.jetty.http.HttpStatus;
-import org.eclipse.jetty.server.Request;
-import org.eclipse.jetty.server.Server;
-import org.eclipse.jetty.server.handler.AbstractHandler;
-import org.eclipse.jetty.server.nio.SelectChannelConnector;
-import org.eclipse.jetty.util.ByteArrayOutputStream2;
-import org.eclipse.jetty.util.IO;
-
public class Benchmark {
- public static void main(String[] args) throws Exception {
-
- String ns = System.getProperty("hc.benchmark.n-requests", "200000");
- String nc = System.getProperty("hc.benchmark.concurrent", "20");
- String cls = System.getProperty("hc.benchmark.content-len", "2048");
-
- int n = Integer.parseInt(ns);
- int c = Integer.parseInt(nc);
- int contentLen = Integer.parseInt(cls);
-
- SelectChannelConnector connector = new SelectChannelConnector();
- Server server = new Server();
- server.addConnector(connector);
- server.setHandler(new RandomDataHandler());
-
- server.start();
- int port = connector.getLocalPort();
-
- TestHttpAgent[] agents = new TestHttpAgent[] {
- new TestHttpJRE(),
- new TestHttpClient4(),
- new TestJettyHttpClient(),
- new TestNingHttpClient()
- };
-
- byte[] content = new byte[contentLen];
- int r = Math.abs(content.hashCode());
- for (int i = 0; i < content.length; i++) {
- content[i] = (byte) ((r + i) % 96 + 32);
- }
-
- URI warmup = new URI("http", null, "localhost", port, "/rnd", "c=2048", null);
- URI target1 = new URI("http", null, "localhost", port, "/rnd", "c=" + contentLen, null);
- URI target2 = new URI("http", null, "localhost", port, "/echo", null, null);
-
- try {
- for (TestHttpAgent agent: agents) {
- try {
- agent.init();
- // Warm up
- agent.get(warmup, 500, 2);
- // Sleep a little
- Thread.sleep(5000);
-
- System.out.println("=================================");
- System.out.println("HTTP agent: " + agent.getClientName());
- System.out.println("---------------------------------");
- System.out.println(n + " GET requests");
- System.out.println("---------------------------------");
-
- long startTime1 = System.currentTimeMillis();
- Stats stats1 = agent.get(target1, n, c);
- long finishTime1 = System.currentTimeMillis();
- Stats.printStats(target1, startTime1, finishTime1, stats1);
- System.out.println("---------------------------------");
- System.out.println(n + " POST requests");
- System.out.println("---------------------------------");
-
- long startTime2 = System.currentTimeMillis();
- Stats stats2 = agent.post(target2, content, n, c);
- long finishTime2 = System.currentTimeMillis();
- Stats.printStats(target2, startTime2, finishTime2, stats2);
- } finally {
- agent.shutdown();
- }
- System.out.println("---------------------------------");
- }
- } finally {
- server.stop();
- }
- server.join();
- }
-
- static class RandomDataHandler extends AbstractHandler {
-
- public RandomDataHandler() {
- super();
- }
-
- public void handle(
- final String target,
- final Request baseRequest,
- final HttpServletRequest request,
- final HttpServletResponse response) throws IOException, ServletException {
- if (target.equals("/rnd")) {
- rnd(request, response);
- } else if (target.equals("/echo")) {
- echo(request, response);
- } else {
- response.setStatus(HttpStatus.NOT_FOUND_404);
- Writer writer = response.getWriter();
- writer.write("Target not found: " + target);
- writer.flush();
- }
- }
-
- private void rnd(
- final HttpServletRequest request,
- final HttpServletResponse response) throws IOException {
- int count = 100;
- String s = request.getParameter("c");
- try {
- count = Integer.parseInt(s);
- } catch (NumberFormatException ex) {
- response.setStatus(500);
- Writer writer = response.getWriter();
- writer.write("Invalid query format: " + request.getQueryString());
- writer.flush();
- return;
- }
-
- response.setStatus(200);
- response.setContentLength(count);
-
- OutputStream outstream = response.getOutputStream();
- byte[] tmp = new byte[1024];
- int r = Math.abs(tmp.hashCode());
- int remaining = count;
- while (remaining > 0) {
- int chunk = Math.min(tmp.length, remaining);
- for (int i = 0; i < chunk; i++) {
- tmp[i] = (byte) ((r + i) % 96 + 32);
- }
- outstream.write(tmp, 0, chunk);
- remaining -= chunk;
- }
- outstream.flush();
- }
-
- private void echo(
- final HttpServletRequest request,
- final HttpServletResponse response) throws IOException {
-
- ByteArrayOutputStream2 buffer = new ByteArrayOutputStream2();
- InputStream instream = request.getInputStream();
- if (instream != null) {
- IO.copy(instream, buffer);
- buffer.flush();
- }
- byte[] content = buffer.getBuf();
- int len = buffer.getCount();
-
- response.setStatus(200);
- response.setContentLength(len);
-
- OutputStream outstream = response.getOutputStream();
- outstream.write(content, 0, len);
- outstream.flush();
- }
-
+ public static void main(final String[] args) throws Exception {
+ final Config config = BenchRunner.parseConfig(args);
+ if (config.getUri() == null) {
+ System.err.println("Please specify a target URI");
+ System.exit(-1);
+ }
+ System.out.println("Running benchmark against " + config.getUri());
+ BenchRunner.run(new HttpJRE(), config);
+ BenchRunner.run(new ApacheHttpClient(), config);
+ BenchRunner.run(new JettyHttpClient(), config);
+ BenchRunner.run(new ApacheHttpClient(), config);
+ BenchRunner.run(new NingHttpClient(), config);
}
}
Copied: httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/Config.java (from r1499525, httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/TestHttpAgent.java)
URL: http://svn.apache.org/viewvc/httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/Config.java?p2=httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/Config.java&p1=httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/TestHttpAgent.java&r1=1499525&r2=1499526&rev=1499526&view=diff
==============================================================================
--- httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/TestHttpAgent.java (original)
+++ httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/Config.java Wed Jul 3 19:14:57 2013
@@ -27,16 +27,60 @@ package org.apache.http.client.benchmark
import java.net.URI;
-public interface TestHttpAgent {
+public final class Config {
- void init() throws Exception;
+ private URI uri;
+ private int requests;
+ private int concurrency;
+ private boolean keepAlive;
+ private int contentLength;
+
+ public Config() {
+ super();
+ this.requests = 1;
+ this.concurrency = 1;
+ this.contentLength = 2048;
+ this.keepAlive = false;
+ }
+
+ public URI getUri() {
+ return uri;
+ }
+
+ public void setUri(final URI uri) {
+ this.uri = uri;
+ }
+
+ public int getRequests() {
+ return requests;
+ }
+
+ public void setRequests(final int requests) {
+ this.requests = requests;
+ }
+
+ public int getConcurrency() {
+ return concurrency;
+ }
+
+ public void setConcurrency(final int concurrency) {
+ this.concurrency = concurrency;
+ }
+
+ public boolean isKeepAlive() {
+ return keepAlive;
+ }
+
+ public void setKeepAlive(final boolean keepAlive) {
+ this.keepAlive = keepAlive;
+ }
+
+ public int getContentLength() {
+ return contentLength;
+ }
+
+ public void setContentLength(final int contentLength) {
+ this.contentLength = contentLength;
+ }
- void shutdown() throws Exception;
-
- String getClientName();
-
- Stats get(URI target, int n, int c) throws Exception;
-
- Stats post(URI target, byte[] content, int n, int c) throws Exception;
-
-}
\ No newline at end of file
+}
Copied: httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/HttpAgent.java (from r1499525, httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/TestHttpAgent.java)
URL: http://svn.apache.org/viewvc/httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/HttpAgent.java?p2=httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/HttpAgent.java&p1=httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/TestHttpAgent.java&r1=1499525&r2=1499526&rev=1499526&view=diff
==============================================================================
--- httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/TestHttpAgent.java (original)
+++ httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/HttpAgent.java Wed Jul 3 19:14:57 2013
@@ -27,7 +27,7 @@ package org.apache.http.client.benchmark
import java.net.URI;
-public interface TestHttpAgent {
+public interface HttpAgent {
void init() throws Exception;
Propchange: httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/HttpAgent.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/HttpAgent.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/HttpAgent.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied: httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/HttpJRE.java (from r1499525, httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/TestHttpJRE.java)
URL: http://svn.apache.org/viewvc/httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/HttpJRE.java?p2=httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/HttpJRE.java&p1=httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/TestHttpJRE.java&r1=1499525&r2=1499526&rev=1499526&view=diff
==============================================================================
--- httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/TestHttpJRE.java (original)
+++ httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/HttpJRE.java Wed Jul 3 19:14:57 2013
@@ -32,9 +32,9 @@ import java.net.HttpURLConnection;
import java.net.URI;
import java.net.URL;
-public class TestHttpJRE implements TestHttpAgent {
+public class HttpJRE implements HttpAgent {
- public TestHttpJRE() {
+ public HttpJRE() {
super();
}
@@ -132,29 +132,9 @@ public class TestHttpJRE implements Test
return "JRE HTTP " + System.getProperty("java.version");
}
- public static void main(String[] args) throws Exception {
- if (args.length < 2) {
- System.out.println("Usage: <target URI> <no of requests> <concurrent connections>");
- System.exit(-1);
- }
- URI targetURI = new URI(args[0]);
- int n = Integer.parseInt(args[1]);
- int c = 1;
- if (args.length > 2) {
- c = Integer.parseInt(args[2]);
- }
-
- TestHttpJRE test = new TestHttpJRE();
- test.init();
- try {
- long startTime = System.currentTimeMillis();
- Stats stats = test.get(targetURI, n, c);
- long finishTime = System.currentTimeMillis();
-
- Stats.printStats(targetURI, startTime, finishTime, stats);
- } finally {
- test.shutdown();
- }
+ public static void main(final String[] args) throws Exception {
+ final Config config = BenchRunner.parseConfig(args);
+ BenchRunner.run(new HttpJRE(), config);
}
}
\ No newline at end of file
Propchange: httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/HttpJRE.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/HttpJRE.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/HttpJRE.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied: httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/JettyHttpClient.java (from r1499525, httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/TestJettyHttpClient.java)
URL: http://svn.apache.org/viewvc/httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/JettyHttpClient.java?p2=httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/JettyHttpClient.java&p1=httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/TestJettyHttpClient.java&r1=1499525&r2=1499526&rev=1499526&view=diff
==============================================================================
--- httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/TestJettyHttpClient.java (original)
+++ httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/JettyHttpClient.java Wed Jul 3 19:14:57 2013
@@ -34,11 +34,11 @@ import org.eclipse.jetty.io.Buffer;
import org.eclipse.jetty.io.ByteArrayBuffer;
import org.eclipse.jetty.server.Server;
-public class TestJettyHttpClient implements TestHttpAgent {
+public class JettyHttpClient implements HttpAgent {
private final HttpClient client;
- public TestJettyHttpClient() {
+ public JettyHttpClient() {
super();
this.client = new HttpClient();
this.client.setRequestBufferSize(8 * 1024);
@@ -139,29 +139,9 @@ public class TestJettyHttpClient impleme
}
- public static void main(String[] args) throws Exception {
- if (args.length < 2) {
- System.out.println("Usage: <target URI> <no of requests> <concurrent connections>");
- System.exit(-1);
- }
- URI targetURI = new URI(args[0]);
- int n = Integer.parseInt(args[1]);
- int c = 1;
- if (args.length > 2) {
- c = Integer.parseInt(args[2]);
- }
-
- TestJettyHttpClient test = new TestJettyHttpClient();
- test.init();
- try {
- long startTime = System.currentTimeMillis();
- Stats stats = test.get(targetURI, n, c);
- long finishTime = System.currentTimeMillis();
-
- Stats.printStats(targetURI, startTime, finishTime, stats);
- } finally {
- test.shutdown();
- }
+ public static void main(final String[] args) throws Exception {
+ final Config config = BenchRunner.parseConfig(args);
+ BenchRunner.run(new JettyHttpClient(), config);
}
}
\ No newline at end of file
Propchange: httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/JettyHttpClient.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/JettyHttpClient.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/JettyHttpClient.java
------------------------------------------------------------------------------
svn:mime-type = text/plain
Copied: httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/NingHttpClient.java (from r1499525, httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/TestNingHttpClient.java)
URL: http://svn.apache.org/viewvc/httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/NingHttpClient.java?p2=httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/NingHttpClient.java&p1=httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/TestNingHttpClient.java&r1=1499525&r2=1499526&rev=1499526&view=diff
==============================================================================
--- httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/TestNingHttpClient.java (original)
+++ httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/NingHttpClient.java Wed Jul 3 19:14:57 2013
@@ -36,11 +36,11 @@ import com.ning.http.client.HttpResponse
import com.ning.http.client.HttpResponseStatus;
import com.ning.http.client.Request;
-public class TestNingHttpClient implements TestHttpAgent {
+public class NingHttpClient implements HttpAgent {
private AsyncHttpClient client;
- public TestNingHttpClient() {
+ public NingHttpClient() {
super();
}
@@ -137,29 +137,9 @@ public class TestNingHttpClient implemen
}
- public static void main(String[] args) throws Exception {
- if (args.length < 2) {
- System.out.println("Usage: <target URI> <no of requests> <concurrent connections>");
- System.exit(-1);
- }
- URI targetURI = new URI(args[0]);
- int n = Integer.parseInt(args[1]);
- int c = 1;
- if (args.length > 2) {
- c = Integer.parseInt(args[2]);
- }
-
- TestNingHttpClient test = new TestNingHttpClient();
- test.init();
- try {
- long startTime = System.currentTimeMillis();
- Stats stats = test.get(targetURI, n, c);
- long finishTime = System.currentTimeMillis();
-
- Stats.printStats(targetURI, startTime, finishTime, stats);
- } finally {
- test.shutdown();
- }
+ public static void main(final String[] args) throws Exception {
+ final Config config = BenchRunner.parseConfig(args);
+ BenchRunner.run(new NingHttpClient(), config);
}
}
\ No newline at end of file
Propchange: httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/NingHttpClient.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/NingHttpClient.java
------------------------------------------------------------------------------
svn:keywords = Date Revision
Propchange: httpcomponents/benchmark/httpclient/branches/4.2.x/src/main/java/org/apache/http/client/benchmark/NingHttpClient.java
------------------------------------------------------------------------------
svn:mime-type = text/plain