hc-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Apache Wiki <wikidi...@apache.org>
Subject [Httpcomponents Wiki] Update of "HttpClient3vsHttpClient4vsHttpCore" by OlegKalnichevski
Date Mon, 06 Apr 2009 19:57:29 GMT
Dear Wiki user,

You have subscribed to a wiki page or wiki category on "Httpcomponents Wiki" for change notification.

The following page has been changed by OlegKalnichevski:
http://wiki.apache.org/HttpComponents/HttpClient3vsHttpClient4vsHttpCore

------------------------------------------------------------------------------
  
  '''BIG FAT DISCLAIMER''': These benchmarks are NOT based on any scientific methodology so
the numbers are likely to be non-precise  
  
- == HttpClient 3.x code ==
+ == Source code ==
+ 
+ [http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/httpclient-benchmark/src/main/java/org/apache/http/client/benchmark/TestHttpClient3.java
HttpClient 4.x]
+ 
+ [http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/httpclient-benchmark/src/main/java/org/apache/http/client/benchmark/TestHttpClient4.java
HttpClient 3.x]
+ 
+ [http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/httpclient-benchmark/src/main/java/org/apache/http/client/benchmark/TestHttpCore.java
HttpCore 4.x]
+ 
+ [http://svn.apache.org/repos/asf/httpcomponents/httpclient/trunk/httpclient-benchmark/src/main/java/org/apache/http/client/benchmark/TestHttpJRE.java
JRE HTTP]
+ 
+ == Test platform ==
  
  {{{
+ OS: Microsoft Windows Vista; CPU: Intel Core(tm)2 Quad Q6600@2.40GHz; RAM: 4 GB
- public static void main(String[] args) throws Exception {
-     if (args.length < 2) {
-         System.out.println("Usage: <target URI> <no of requests>");
-         System.exit(-1);
-     }
-     String targetURI = args[0];
-     int n = Integer.parseInt(args[1]);
-     
-     HttpClient httpclient = new HttpClient();
-     httpclient.getParams().setVersion(
-             HttpVersion.HTTP_1_1);
-     httpclient.getParams().setBooleanParameter(
-             HttpMethodParams.USE_EXPECT_CONTINUE, false);
-     httpclient.getHttpConnectionManager().getParams()
-             .setStaleCheckingEnabled(false);
-     
-     GetMethod httpget = new GetMethod(targetURI);
- 
-     byte[] buffer = new byte[4096];
-     
-     long startTime;
-     long finishTime;
-     int successCount = 0;
-     int failureCount = 0;
-     String serverName = "unknown";
-     long total = 0;
-     long contentLen = 0;
-     long totalContentLen = 0;
-     
-     startTime = System.currentTimeMillis();
-     for (int i = 0; i < n; i++) {
-         try {
-             httpclient.executeMethod(httpget);
-             InputStream instream = httpget.getResponseBodyAsStream();
-             contentLen = 0;
-             if (instream != null) {
-                 int l = 0;
-                 while ((l = instream.read(buffer)) != -1) {
-                     total += l;
-                     contentLen += l;
-                 }
-             }
-             successCount++;
-             totalContentLen += contentLen;
-         } catch (IOException ex) {
-             failureCount++;
-         } finally {
-             httpget.releaseConnection();
-         }
-     }
-     finishTime = System.currentTimeMillis();
-     
-     Header header = httpget.getResponseHeader("Server");
-     if (header != null) {
-         serverName = header.getValue();
-     }
-     
-     float totalTimeSec = (float) (finishTime - startTime) / 1000;
-     float reqsPerSec = (float) successCount / totalTimeSec; 
-     float timePerReqMs = (float) (finishTime - startTime) / (float) successCount; 
-     
-     System.out.print("Server Software:\t");
-     System.out.println(serverName);
-     System.out.println();
-     System.out.print("Document URI:\t\t");
-     System.out.println(targetURI);
-     System.out.print("Document Length:\t");
-     System.out.print(contentLen);
-     System.out.println(" bytes");
-     System.out.println();
-     System.out.print("Time taken for tests:\t");
-     System.out.print(totalTimeSec);
-     System.out.println(" seconds");
-     System.out.print("Complete requests:\t");
-     System.out.println(successCount);
-     System.out.print("Failed requests:\t");
-     System.out.println(failureCount);
-     System.out.print("Content transferred:\t");
-     System.out.print(total);
-     System.out.println(" bytes");
-     System.out.print("Requests per second:\t");
-     System.out.print(reqsPerSec);
-     System.out.println(" [#/sec] (mean)");
-     System.out.print("Time per request:\t");
-     System.out.print(timePerReqMs);
-     System.out.println(" [ms] (mean)");
- }
- 
  }}}
  
- == HttpClient 4.x code ==
+ {{{
+ java version "1.6.0_13"
+ Java(TM) SE Runtime Environment (build 1.6.0_13-b03)
+ Java HotSpot(TM) Client VM (build 11.3-b02, mixed mode, sharing)
+ }}}
+ 
+ === Test settings ===
  
  {{{
+ 200,000 HTTP GETs, keep alive, content length: 689 bytes
-     if (args.length < 2) {
-         System.out.println("Usage: <target URI> <no of requests>");
-         System.exit(-1);
-     }
-     String targetURI = args[0];
-     int n = Integer.parseInt(args[1]);
-     
-     BasicHttpParams params = new BasicHttpParams();
-     params.setParameter(HttpProtocolParams.PROTOCOL_VERSION, 
-             HttpVersion.HTTP_1_1);
-     params.setBooleanParameter(HttpProtocolParams.USE_EXPECT_CONTINUE, 
-             false);
-     params.setBooleanParameter(HttpConnectionParams.STALE_CONNECTION_CHECK, 
-             false);
-     params.setIntParameter(HttpConnectionParams.SOCKET_BUFFER_SIZE, 
-             2 * 1024);
-     
-     DefaultHttpClient httpclient = new DefaultHttpClient(params);
-     
-     HttpGet httpget = new HttpGet(targetURI);
- 
-     byte[] buffer = new byte[4096];
-     
-     long startTime;
-     long finishTime;
-     int successCount = 0;
-     int failureCount = 0;
-     String serverName = "unknown";
-     long total = 0;
-     long contentLen = 0;
-     long totalContentLen = 0;
-     
-     startTime = System.currentTimeMillis();
-     for (int i = 0; i < n; i++) {
-         HttpResponse response = httpclient.execute(httpget);
-         HttpEntity entity = response.getEntity();
-         if (entity != null) {
-             InputStream instream = entity.getContent();
-             try {
-                 contentLen = 0;
-                 if (instream != null) {
-                     int l = 0;
-                     while ((l = instream.read(buffer)) != -1) {
-                         total += l;
-                         contentLen += l;
-                     }
-                 }
-                 successCount++;
-                 totalContentLen += contentLen;
-             } catch (IOException ex) {
-                 httpget.abort();
-                 failureCount++;
-             } finally {
-                 instream.close();
-             }
-         }
-         Header header = response.getFirstHeader("Server");
-         if (header != null) {
-             serverName = header.getValue();
-         }
-     }
-     finishTime = System.currentTimeMillis();
-     
-     float totalTimeSec = (float) (finishTime - startTime) / 1000;
-     float reqsPerSec = (float) successCount / totalTimeSec; 
-     float timePerReqMs = (float) (finishTime - startTime) / (float) successCount; 
-     
-     System.out.print("Server Software:\t");
-     System.out.println(serverName);
-     System.out.println();
-     System.out.print("Document URI:\t\t");
-     System.out.println(targetURI);
-     System.out.print("Document Length:\t");
-     System.out.print(contentLen);
-     System.out.println(" bytes");
-     System.out.println();
-     System.out.print("Time taken for tests:\t");
-     System.out.print(totalTimeSec);
-     System.out.println(" seconds");
-     System.out.print("Complete requests:\t");
-     System.out.println(successCount);
-     System.out.print("Failed requests:\t");
-     System.out.println(failureCount);
-     System.out.print("Content transferred:\t");
-     System.out.print(total);
-     System.out.println(" bytes");
-     System.out.print("Requests per second:\t");
-     System.out.print(reqsPerSec);
-     System.out.println(" [#/sec] (mean)");
-     System.out.print("Time per request:\t");
-     System.out.print(timePerReqMs);
-     System.out.println(" [ms] (mean)");
- }
- 
  }}}
  
+ === Test results ===
- == HttpCore 4.x code ==
- 
- {{{
- public static void main(String[] args) throws Exception {
-     if (args.length < 2) {
-         System.out.println("Usage: <target URI> <no of requests>");
-         System.exit(-1);
-     }
-     URI targetURI = new URI(args[0]);
-     int n = Integer.parseInt(args[1]);
-     
-     HttpHost targetHost = new HttpHost(
-             targetURI.getHost(), 
-             targetURI.getPort()); 
-     
-     BasicHttpParams params = new BasicHttpParams();
-     params.setParameter(HttpProtocolParams.PROTOCOL_VERSION, 
-             HttpVersion.HTTP_1_1);
-     params.setBooleanParameter(HttpProtocolParams.USE_EXPECT_CONTINUE, 
-             false);
-     params.setBooleanParameter(HttpConnectionParams.STALE_CONNECTION_CHECK, 
-             false);
-     params.setIntParameter(HttpConnectionParams.SOCKET_BUFFER_SIZE, 
-             2 * 1024);
-     
-     BasicHttpRequest httpget = new BasicHttpRequest("GET", targetURI.getPath());
- 
-     byte[] buffer = new byte[4096];
-     
-     long startTime;
-     long finishTime;
-     int successCount = 0;
-     int failureCount = 0;
-     String serverName = "unknown";
-     long total = 0;
-     long contentLen = 0;
-     long totalContentLen = 0;
-     
-     HttpRequestExecutor httpexecutor = new HttpRequestExecutor();
-     BasicHttpProcessor httpproc = new BasicHttpProcessor(); 
-     // Required protocol interceptors
-     httpproc.addInterceptor(new RequestContent());
-     httpproc.addInterceptor(new RequestTargetHost());
-     // Recommended protocol interceptors
-     httpproc.addInterceptor(new RequestConnControl());
-     httpproc.addInterceptor(new RequestUserAgent());
-     httpproc.addInterceptor(new RequestExpectContinue());
-     
-     HttpContext context = new HttpExecutionContext(null);
- 
-     DefaultHttpClientConnection conn = new DefaultHttpClientConnection();
- 
-     DefaultConnectionReuseStrategy connStrategy = new DefaultConnectionReuseStrategy();

-     
-     startTime = System.currentTimeMillis();
-     for (int i = 0; i < n; i++) {
-         if (!conn.isOpen()) {
-             Socket socket = new Socket(
-                     targetHost.getHostName(), 
-                     targetHost.getPort() > 0 ? targetHost.getPort() : 80);
-             conn.bind(socket, params);
-         }
- 
-         context.setAttribute(HttpExecutionContext.HTTP_CONNECTION, conn);
-         context.setAttribute(HttpExecutionContext.HTTP_TARGET_HOST, targetHost);
-         context.setAttribute(HttpExecutionContext.HTTP_REQUEST, httpget);
-         httpexecutor.preProcess(httpget, httpproc, context);
- 
-         HttpResponse response = httpexecutor.execute(httpget, conn, context);
-         
-         context.setAttribute(HttpExecutionContext.HTTP_RESPONSE, response);
-         httpexecutor.postProcess(response, httpproc, context);
-         
-         HttpEntity entity = response.getEntity();
-         if (entity != null) {
-             InputStream instream = entity.getContent();
-             try {
-                 contentLen = 0;
-                 if (instream != null) {
-                     int l = 0;
-                     while ((l = instream.read(buffer)) != -1) {
-                         total += l;
-                         contentLen += l;
-                     }
-                 }
-                 successCount++;
-                 totalContentLen += contentLen;
-             } catch (IOException ex) {
-                 conn.shutdown();
-                 failureCount++;
-             } finally {
-                 instream.close();
-             }
-         }
-         if (!connStrategy.keepAlive(response, context)) {
-             conn.close();
-         }
-         Header header = response.getFirstHeader("Server");
-         if (header != null) {
-             serverName = header.getValue();
-         }
-     }
-     finishTime = System.currentTimeMillis();
-     
-     float totalTimeSec = (float) (finishTime - startTime) / 1000;
-     float reqsPerSec = (float) successCount / totalTimeSec; 
-     float timePerReqMs = (float) (finishTime - startTime) / (float) successCount; 
-     
-     System.out.print("Server Software:\t");
-     System.out.println(serverName);
-     System.out.println();
-     System.out.print("Document URI:\t\t");
-     System.out.println(targetURI);
-     System.out.print("Document Length:\t");
-     System.out.print(contentLen);
-     System.out.println(" bytes");
-     System.out.println();
-     System.out.print("Time taken for tests:\t");
-     System.out.print(totalTimeSec);
-     System.out.println(" seconds");
-     System.out.print("Complete requests:\t");
-     System.out.println(successCount);
-     System.out.print("Failed requests:\t");
-     System.out.println(failureCount);
-     System.out.print("Content transferred:\t");
-     System.out.print(total);
-     System.out.println(" bytes");
-     System.out.print("Requests per second:\t");
-     System.out.print(reqsPerSec);
-     System.out.println(" [#/sec] (mean)");
-     System.out.print("Time per request:\t");
-     System.out.print(timePerReqMs);
-     System.out.println(" [ms] (mean)");
- }
- 
- }}}
- 
- == Results ==
- 
- === Platform: Ubuntu Linux 7.04 (i686, 2.6.20-16-generic); java version "1.5.0_11" ===
- 
- ==== 200,000 HTTP GETs, keep alive, content length: 22 bytes  ====
  
   * !HttpClient 3.x
  
  {{{
+ Server Software:	Apache-Coyote/1.1
- java -cp bin:/opt/libjava/commons-httpclient.jar:/opt/libjava/commons-logging.jar:/opt/libjava/commons-codec.jar
\
-    test.perf.HttpClient3PerfTest http://localhost/msg.txt 200000
- }}}
  
- {{{
- Server Software:        Apache/2.2.3 (Ubuntu) mod_ssl/2.2.3 OpenSSL/0.9.8c
+ Document URI:		http://localhost:8080/examples/servlets/servlet/RequestInfoExample
+ Document Length:	689 bytes
  
- Document URI:           http://localhost/msg.txt
- Document Length:        22 bytes
- 
- Time taken for tests:   29.144 seconds
+ Time taken for tests:	36.099 seconds
- Complete requests:      200000
+ Complete requests:	200000
- Failed requests:        0
+ Failed requests:	0
- Content transferred:    4400000 bytes
+ Content transferred:	137800000 bytes
- Requests per second:    6862.476 [#/sec] (mean)
+ Requests per second:	5540.32 [#/sec] (mean)
- Time per request:       0.14572 [ms] (mean)
+ Time per request:	0.180495 [ms] (mean)
  }}}
  
   * !HttpClient 4.x
  
  {{{
+ Server Software:	Apache-Coyote/1.1
- java -cp bin:/opt/libjava/commons-logging.jar:/opt/libjava/commons-codec.jar:lib/httpcore-4.0-alpha5.jar:
-    lib/httpclient-4.0-alpha1-SNAPSHOT.jar \
-    test.perf.HttpClient4PerfTest http://localhost/msg.txt 200000
- }}}
  
- {{{
- Server Software:        Apache/2.2.3 (Ubuntu) mod_ssl/2.2.3 OpenSSL/0.9.8c
+ Document URI:		http://localhost:8080/examples/servlets/servlet/RequestInfoExample
+ Document Length:	689 bytes
  
- Document URI:           http://localhost/msg.txt
- Document Length:        22 bytes
- 
- Time taken for tests:   24.408 seconds
+ Time taken for tests:	35.381 seconds
- Complete requests:      200000
+ Complete requests:	200000
- Failed requests:        0
+ Failed requests:	0
- Content transferred:    4400000 bytes
+ Content transferred:	137800000 bytes
- Requests per second:    8194.034 [#/sec] (mean)
+ Requests per second:	5652.7515 [#/sec] (mean)
- Time per request:       0.12204 [ms] (mean)
+ Time per request:	0.176905 [ms] (mean)
  }}}
  
   * !HttpCore 4.x
  
  {{{
- java -cp bin:lib/httpcore-4.0-alpha5.jar \ 
-    test.perf.HttpCorePerfTest http://localhost/msg.txt 200000
+ Server Software:	Apache-Coyote/1.1
+ 
+ Document URI:		http://localhost:8080/examples/servlets/servlet/RequestInfoExample
+ Document Length:	689 bytes
+ 
+ Time taken for tests:	26.505 seconds
+ Complete requests:	200000
+ Failed requests:	0
+ Content transferred:	137800000 bytes
+ Requests per second:	7545.746 [#/sec] (mean)
+ Time per request:	0.132525 [ms] (mean)
- }}} 
+ }}}
+ 
+  * HTTP JRE
  
  {{{
- Server Software:        Apache/2.2.3 (Ubuntu) mod_ssl/2.2.3 OpenSSL/0.9.8c
+ Server Software:	Apache-Coyote/1.1
  
- Document URI:           http://localhost/msg.txt
+ Document URI:		http://localhost:8080/examples/servlets/servlet/RequestInfoExample
- Document Length:        22 bytes
+ Document Length:	689 bytes
  
- Time taken for tests:   19.567 seconds
+ Time taken for tests:	32.792 seconds
- Complete requests:      200000
+ Complete requests:	200000
- Failed requests:        0
+ Failed requests:	0
- Content transferred:    4400000 bytes
+ Content transferred:	137800000 bytes
- Requests per second:    10221.291 [#/sec] (mean)
+ Requests per second:	6099.0483 [#/sec] (mean)
- Time per request:       0.097835 [ms] (mean)
+ Time per request:	0.16396 [ms] (mean)
  }}}
  
- ==== 200,000 HTTP GETs, keep alive, content length: 20,000 bytes  ====
- 
-  * !HttpClient 3.x
- 
- {{{
- java -cp bin:/opt/libjava/commons-httpclient.jar:/opt/libjava/commons-logging.jar:/opt/libjava/commons-codec.jar
\
-    test.perf.HttpClient3PerfTest http://localhost/blob 200000
- }}}
- 
- {{{
- Server Software:        Apache/2.2.3 (Ubuntu) mod_ssl/2.2.3 OpenSSL/0.9.8c
- 
- Document URI:           http://localhost/blob
- Document Length:        20000 bytes
- 
- Time taken for tests:   35.809 seconds
- Complete requests:      200000
- Failed requests:        0
- Content transferred:    4000000000 bytes
- Requests per second:    5585.1885 [#/sec] (mean)
- Time per request:       0.179045 [ms] (mean)
- }}}
- 
-  * !HttpClient 4.x
- 
- {{{
- java -cp bin:/opt/libjava/commons-logging.jar:/opt/libjava/commons-codec.jar:lib/httpcore-4.0-alpha5.jar:
-    lib/httpclient-4.0-alpha1-SNAPSHOT.jar \
-    test.perf.HttpClient4PerfTest http://localhost/blob 200000
- }}}
- 
- {{{
- Server Software:        Apache/2.2.3 (Ubuntu) mod_ssl/2.2.3 OpenSSL/0.9.8c
- 
- Document URI:           http://localhost/blob
- Document Length:        20000 bytes
- 
- Time taken for tests:   33.398 seconds
- Complete requests:      200000
- Failed requests:        0
- Content transferred:    4000000000 bytes
- Requests per second:    5988.383 [#/sec] (mean)
- Time per request:       0.16699 [ms] (mean)
- }}}
- 
-  * !HttpCore 4.x
- 
- {{{
- java -cp bin:lib/httpcore-4.0-alpha5.jar \
-    test.perf.HttpCorePerfTest http://localhost/blob 200000
- }}}
- 
- {{{
- Server Software:        Apache/2.2.3 (Ubuntu) mod_ssl/2.2.3 OpenSSL/0.9.8c
- 
- Document URI:           http://localhost/blob
- Document Length:        20000 bytes
- 
- Time taken for tests:   28.584 seconds
- Complete requests:      200000
- Failed requests:        0
- Content transferred:    4000000000 bytes
- Requests per second:    6996.9214 [#/sec] (mean)
- Time per request:       0.14292 [ms] (mean)
- }}}
- 

---------------------------------------------------------------------
To unsubscribe, e-mail: dev-unsubscribe@hc.apache.org
For additional commands, e-mail: dev-help@hc.apache.org


Mime
View raw message