Wolfgang, Please allow me to point out that your comparison is not completely accurate. Apache benchmark (I assume) uses HTTP GET requests, whereas your test application uses HTTP POST requests. Besides, you should have used HttpCliet's simple (non-multithreaded) connection manager to be on an equal footing with AB. I have tweaked your application somewhat (See the source code attached below) and that is what I got
1000 HTTP GET requests against local Tomcat 4.1.27 running on RedHat 9, Sun JRE 1.4.2 HttpClient (Sun JRE 1.4.2): 3.209 [sec] vs Apache Benchmark: 0.910710 [sec] I personally find these results reasonable, taking into account that AP (most likely) does not provide any sort of an object model unlike HttpClient. Bottom line, the trick there was to disable stale connections check which is terribly taxing in terms of performance for massive amount of very short requests. Cheers Oleg ------------------------------------------------------------------------------------------- import org.apache.commons.httpclient.HttpClient; import org.apache.commons.httpclient.SimpleHttpConnectionManager; import org.apache.commons.httpclient.methods.GetMethod; public class HTTPBug { protected HttpClient client; protected String url; public static void main(String[] args) throws Exception { int k=0; int size = 1000; if (args.length > k) size = Integer.parseInt(args[k++]); String url = "/examples/servlet/HelloWorldExample"; if (args.length > k) url = args[k++]; SimpleHttpConnectionManager conn_manager = new SimpleHttpConnectionManager(); HttpClient client = new HttpClient(conn_manager); conn_manager.setConnectionStaleCheckingEnabled(false); client.getHostConfiguration().setHost("localhost", 8080); long start = System.currentTimeMillis(); for (int i=0; i<size; i++) { GetMethod method = new GetMethod(url); client.executeMethod(method); method.releaseConnection(); } long end = System.currentTimeMillis(); System.out.println("total time (ms): " + (end - start)); System.out.println("time (ms) per request: " + ((end - start)/size)); } } ------------------------------------------------------------------------------------------- <snip> Server Software: Apache Server Hostname: localhost Server Port: 8080 Document Path: /examples/servlet/HelloWorldExample Document Length: 405 bytes Concurrency Level: 1 Time taken for tests: 0.910710 seconds Complete requests: 1000 Failed requests: 0 Write errors: 0 Keep-Alive requests: 990 Total transferred: 557950 bytes HTML transferred: 405000 bytes Requests per second: 1098.04 [#/sec] (mean) Time per request: 0.911 [ms] (mean) Time per request: 0.911 [ms] (mean, across all concurrent requests) Transfer rate: 597.34 [Kbytes/sec] received <snip> ------------------------------------------------------------------------------------------- -----Original Message----- From: Wolfgang Hoschek [mailto:[EMAIL PROTECTED] Sent: Thursday, August 14, 2003 1:14 AM To: [EMAIL PROTECTED] Cc: Wolfgang Hoschek Subject: Performance HTTPClient vs. ab I am planning on sending and receiving MANY (tens of tousands) small SOAP-like serial messages over the same persistent HTTP 1.1 connection, using a single client and thread (nothing fancy there). A High performance, low latency http library would be ideal. HTTPClient performance seems devastating wrt. ab (apache benchmark): 4300 requests/sec vs. 20 requests/sec, i.e. two orders of magnitute difference, no matter what options I try with HTTPClient. Source code to reproduce and full data is attached. If anyone is interested, please let me know what I'm doing wrong, reproduce the effect and/or post working code that performs well in your experience. ab -k -n 10000 http://localhost:8080/discofish/HelloWorldServlet > /tmp/out Requests per second: 4313.48 [#/sec] (mean) (For more data see full output in attachment) [doggy /home/oliver/g5/users/hoschek] time disco-java.sh gov.lbl.dsd.discofish.client.HTTPBug 100 http://localhost:8080/discofish/HelloWorldServlet > /tmp/out2 real 0m4.876s user 0m0.550s sys 0m0.060s --> Requests per second: 20.0 (For more data see full output in attachment) Similar performance gap on static HTML pages (no need to use a servlet). Environment: httpclient-2.0rc1, jdk-1.4.2, tomcat-4.1.27 (server.xml out of the box), 2GHz Pentium IV, Redhat 8.0. Thanks, Wolfgang. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]