On Fri, 2008-06-13 at 08:35 +0200, Quintin Beukes wrote:
> Hey,
> 
> That's an idea (to first get the code optimized before squeezing it
> into tomcat). I guess I just continued this way, as our current system
> is using HttpURLConnection. So I wanted to get an idea of how it will
> compare.
> 
> I'll take your advice on running it in separate java apps? I assume
> that is what you meant "direct connections", as in no proxied
> connections via tomcat.
> 

Yep.

> If someone had to take a wild guess, which of the examples of the site
> can I use as a base if I'm targeting performance (a good balance
> between throughput and high connection/second rates would be the
> best)?
> 

Most likely you want to run benchmarks against a site with a predictable
routing overhead. If there are too many hops in between you can never be
sure exactly what you are measuring: the performance of the HTTP stack
or that of your Internet service provider's routing infrastructure. 

I guess 'localhost' is your best friend. 

Oleg

> Q
> 
> On Thu, Jun 12, 2008 at 11:02 PM, Oleg Kalnichevski <[EMAIL PROTECTED]> wrote:
> > Quintin Beukes wrote:
> >>
> >> Hey,
> >>
> >> I made some basic servlets to test throughputs for HttpClient,
> >> HttpCore and sun's sun.net.www.protocol.http.HttpURLConnection (or
> >> something along those lines, I don't have an API at hand now).
> >>
> >> I basically just put up an apache session listening on port 8580, and
> >> then Tomcat on port 80. In tomcat I dumped 3 servlets, each using one
> >> of the 3 methods to retrieve a 51kb page from the apache session.
> >>
> >> The benchmarks was done with "ab" with 10 second timeouts. The results
> >> are as follows (in byte readings, not bit readings).
> >>
> >> Doing a direct request to apache I get a throughput of about 33mb/s.
> >> Using HttpURLConnection, 4.7MB/s.
> >> Using HttpCore 3.6MB/s
> >> Using HttpClient 6.03mb/s
> >>
> >> The request times were in general best with apache/HttpClient, maxing
> >> at 38ms for the longest request.
> >>
> >> This was done at a concurrency of 1 connection. Pushing this up to 5,
> >> the HttpCore's connection times stayed the same, but throughput
> >> dropped to 980kb/s. HttpClient's connection times now came to the same
> >> as HttpCore (230ms for longest request), but it's throughput increased
> >> to 7.1mb/s.
> >>
> >> This is all good and well, but my question is this. Are there any ways
> >> I can increase these throughputs? Before just jumping into
> >> optimizations suggestions and referals to documentation, could someone
> >> perhaps just enlighten me into why these speeds are so different. And
> >> especially so low?
> >>
> >
> > I do not want to jump into conclusions here, but I seriously suspect
> > something is wrong with your test cases. In particular I do not understand
> > why you are using Tomcat to host the code your are testing. What is the
> > point of that?
> >
> > I made an extensive comparison of HttpCore vs HttpClient (both versions 3.1
> > and 4.0). HttpCore can easily achieve a throughput of 10,000 (small)
> >  requests per second on a fairly average hardware.
> >
> > http://wiki.apache.org/HttpComponents/HttpClient3vsHttpClient4vsHttpCore
> >
> >
> >> I am obviously using HttpCore wrong for it to be so slow (I mean,
> >> HttpClient is built on core, so it's impossible to be faster). It's
> >> just that the documentation for these are sparse, and I'm having a
> >> very hard time finding my way around.
> >>
> >> And beyond this, Tomcat itself gives me fantastic speeds reading
> >> static data. Where are the bottlenecks?
> >>
> >> The HttpCore setup I used was the "Basic GET Requests" example
> >> available on the site. I modified it a bit to allow URL input and
> >> target server specified through parameters passed to the servlet.
> >> Beyond that I didn't change anything. My assumption is that
> >> connections aren't being reused. In fact, I know this is the case, so
> >> it logically and obviously removes the validity of the above
> >> benchmarks for HttpCore. I'm not going to remove them though.
> >>
> >> I would really like to get throughputs similar to direct Apache
> >> connections (at least 33+ mbyte/s, which is round about the general
> >> limit of hard drive transfer rates). Full ethernet throughput is
> >> preferable and I'm sure possible. Downloading large files I get speeds
> >> of up to 54mbyte/s with Apache. I'm sure this is limited only to the
> >> hard drive I tested with, as it's a gigabit connection, and this is
> >> just less than half it's full potential. I haven't done tests using
> >> memory transfer. Will try it when I can diagnose the bottlenecks I
> >> currently have, and then use them as measurements to gain insights
> >> into the speed of the program itself by taking as much of the other
> >> bottlenecks in the system away as possible (in this case the
> >> limitation of data transfer rates from the hard drives).
> >>
> >> The three benchmark servlets I used are here:
> >> HttpClient: http://quintin.dev.junkmail.co.za/httpclient/Bench.java
> >> HttpCore: http://quintin.dev.junkmail.co.za/httpclient/BenchCore.java
> >> HttpURLConn: http://quintin.dev.junkmail.co.za/httpclient/BenchURL.java
> >>
> >> And a utility class I use in the above:
> >> http://quintin.dev.junkmail.co.za/httpclient/StreamBinder.java
> >>
> >> Any insights would be greatly appreciated.
> >>
> >
> > I'll try to look at the benchmark code over the weekend. But I would
> > _strongly_ suggest measuring the performance of each respective framework by
> > using direct connections to the target server. Once you have established the
> > baseline you can work on optimizing the code when running inside a servlet
> > container.
> >
> > Oleg
> >
> >> regards,
> >
> >
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: [EMAIL PROTECTED]
> > For additional commands, e-mail: [EMAIL PROTECTED]
> >
> >
> 
> 
> 


---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to