hc-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Roland Weber <ROLWE...@de.ibm.com>
Subject RE: GetMethod Performance
Date Tue, 17 Feb 2004 06:30:17 GMT
Hello Ben,

without digging into details, I'd say the profile indicates
some problems with the crypto algorithms. They seem
to get interpreted, instead of being compiled by a JIT or
branching into native code.
Since your test only fetches on page in a single request,
it won't make much of a difference whether the connection
is kept alive or not.

I think you should try to profile the "native socket" version,
and try to find out which crypto service provider is used
for the SSL connection there. If it's a different one than used
by the HttpClient, modify the SecureProtocolSocketFactory
to use the faster crypto service provider.

cheers,
  Roland






"Ben Wong" <bwong@adaptiveinternational.com>
16.02.2004 23:39
Please respond to "Commons HttpClient Project"
 
        To:     "'Commons HttpClient Project'" 
<commons-httpclient-dev@jakarta.apache.org>
        cc: 
        Subject:        RE: GetMethod Performance


Oleg,
 
Both didn't make a difference. 
 
I have attached the CPU profile that is generated using -Xprof. The
profile for Sun will be attached to this email, another mail will be
sent for the Windows profile.
 
Any help would be appreciated.
 
Thanks,
Ben
 
Sun Solaris 8 on Sparc
----------------------
Flat profile of 17.72 secs (450 total ticks): main
 
  Interpreted + native   Method
  5.6%    18  +     6    java.math.BigInteger.mulAdd
  3.3%    14  +     0    sun.security.provider.SHA.computeBlock
  3.0%    13  +     0    java.math.BigInteger.addOne
  2.8%    11  +     1    sun.nio.cs.StreamDecoder.read
  1.9%     0  +     8    java.lang.Throwable.fillInStackTrace
  1.6%     0  +     7    java.net.Inet4AddressImpl.lookupAllHostAddr
  1.4%     6  +     0    java.math.BigInteger.montReduce
  1.4%     0  +     6    sun.nio.cs.UTF_8$Decoder.decodeArrayLoop
  1.2%     0  +     5
com.telstra.deon.test.HttpClientPerformance.main
  1.2%     3  +     2    sun.nio.cs.StreamDecoder.read0
  1.2%     0  +     5
org.apache.commons.httpclient.HttpMethodBase.<init>
  0.9%     0  +     4    java.lang.String.charAt
  0.9%     2  +     2    sun.text.ComposedCharIter.findNextChar
  0.7%     0  +     3    sun.nio.cs.ISO_8859_1$Decoder.decodeArrayLoop
  0.7%     0  +     3    java.lang.ClassLoader.defineClass0
  0.7%     1  +     2    java.lang.System.arraycopy
  0.7%     0  +     3    java.lang.String.length
  0.7%     0  +     3    java.lang.StringBuffer.expandCapacity
  0.5%     2  +     0    java.util.HashMap.hash
  0.5%     0  +     2    java.nio.Buffer.position
  0.5%     0  +     2    java.util.zip.Inflater.inflateBytes
  0.5%     0  +     2    java.lang.ref.Reference.get
  0.5%     2  +     0    org.apache.log4j.spi.LoggingEvent.<init>
  0.5%     0  +     2    java.lang.StringBuffer.setLength
  0.5%     1  +     1    java.lang.String.getChars
 44.9%    96  +    96    Total interpreted (including elided)
 
     Compiled + native   Method
 10.0%    40  +     3    java.lang.StringBuffer.append
  7.0%    30  +     0    sun.nio.cs.StreamDecoder.read0
  6.5%     8  +    20    org.apache.commons.httpclient.Wire.wire
  6.5%    28  +     0    java.lang.Integer.toUnsignedString
  6.3%    27  +     0    java.nio.charset.CoderResult$Cache.get
  3.0%    13  +     0    sun.nio.cs.StreamDecoder$CharsetSD.implRead
  2.8%    12  +     0    sun.nio.cs.StreamDecoder.read
  2.3%    10  +     0    java.lang.Integer.hashCode
  2.1%     9  +     0    sun.nio.cs.US_ASCII$Decoder.decodeArrayLoop
  1.4%     6  +     0    java.nio.charset.CharsetDecoder.decode
  1.2%     5  +     0    sun.nio.cs.US_ASCII$Decoder.decodeLoop
  1.2%     5  +     0    java.nio.CharBuffer.put
  0.9%     3  +     1    java.lang.StringBuffer.expandCapacity
  0.5%     2  +     0    java.math.BigInteger.mulAdd
  0.5%     2  +     0    java.nio.Buffer.<init>
  0.2%     1  +     0    java.nio.Buffer.position
 52.6%   201  +    24    Total compiled
 
  Thread-local ticks:
  4.9%    22             Blocked (of total)
  2.3%    10             Class loader
  0.2%     1             Unknown: no last frame
 
 
Flat profile of 0.02 secs (1 total ticks): DestroyJavaVM
 
  Thread-local ticks:
100.0%     1             Blocked (of total)
 
 
Global summary of 17.82 seconds:
100.0%   463             Received ticks
  1.7%     8             Received GC ticks
 57.9%   268             Compilation
  2.2%    10             Class loader
  0.2%     1             Unknown code
 
-----Original Message-----
From: Kalnichevski, Oleg [mailto:oleg.kalnichevski@bearingpoint.com] 
Sent: Tuesday, 17 February 2004 12:27 AM
To: Commons HttpClient Project
Subject: RE: GetMethod Performance
 
Ben,
Try the following:
 
(1) disable stale connections check
 
SimpleHttpConnectionManager connman = new SimpleHttpConnectionManager();

connman.setConnectionStaleCheckingEnabled(false);
HttpClient client = new HttpClient(connman);
 
http://jakarta.apache.org/commons/httpclient/apidocs/org/apache/commons/
httpclient/SimpleHttpConnectionManager.html#setConnectionStaleCheckingEn
abled(boolean)
 
(2) configure HttpClient to use HTTP/1.0 instead of HTTP/1.1
 
GetMethod get = new
GetMethod("http://192.168.0.1/commons-httpclient-2.0-final.zip");
get.setHttp11(false);
 
http://jakarta.apache.org/commons/httpclient/apidocs/org/apache/commons/
httpclient/HttpMethodBase.html#setHttp11(boolean)
 
See if any these options makes any difference
 
Oleg
 
-----Original Message-----
From: Ben Wong [mailto:bwong@adaptiveinternational.com]
Sent: Monday, February 16, 2004 06:41
To: commons-httpclient-dev@jakarta.apache.org
Subject: GetMethod Performance
 
 
Hi,
 
I have noticed significant performance difference between using
HttpClient and Socket.
 
I tried to use GetMethod to download a 2MB file from a Webserver sitting
in the LAN. When I do it with HttpClient, it takes around 13-15 seconds
while it will only take less than half a second with Socket.
 
I was running the code below on a Sun Blade 100 with Solaris 8
installed. J2SDK1.4.2_03 and HttpClient 2.0 final were used.
 
Any help would be appreciated.
 
Thanks,
Ben
 
HttpClient code:
----------------
HttpClient client = new HttpClient();
GetMethod get = new
GetMethod("http://192.168.0.1/commons-httpclient-2.0-final.zip");
 
int statusCode = client.executeMethod(get);
System.out.println("Status Code: " + statusCode);
int size = 0;
 
InputStream in = get.getResponseBodyAsStream();
byte [] data = new byte[10000];
int read = 0;
 
while ((read = in.read(data)) > 0) {
      size += read;
}
 
in.close();
get.releaseConnection();
 
Socket Code:
------------
Socket soc = new Socket("192.168.0.11", 80);
InputStream in = soc.getInputStream();
OutputStream out = soc.getOutputStream();
 
String command = "GET
http://192.168.0.1/commons-httpclient-2.0-final.zip
HTTP/1.0\nUser-Agent: Jakarta Commons-HttpClient/2.0final\nHost:
10.0.3.11\n\n";
byte [] send = command.getBytes();
 
out.write(send);
byte b[] = new byte[4096];
int size = 0;
int count = 0;
while( (size = in.read(b)) >= 0) {
      count += size;
}
in.close();
out.close();
 
soc.close();
 
 
 
 
 
---------------------------------------------------------------------
To unsubscribe, e-mail:
commons-httpclient-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail:
commons-httpclient-dev-help@jakarta.apache.org
 
 
---------------------------------------------------------------------
To unsubscribe, e-mail:
commons-httpclient-dev-unsubscribe@jakarta.apache.org
For additional commands, e-mail:
commons-httpclient-dev-help@jakarta.apache.org
 
 


Mime
  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message