//a) Conceptually, this code does the following:
// SocketAddress addr=new InetSocketAddress(host, port);
// Socket ret=new Socket();
// ret.connect(addr, timeout);
// return ret;
// Unfortunately that causes compile errors on older versions
// of Java. Worse, it may cause runtime errors if class loading
// is not done lazily. (See chapter 12.3.4 of the Java Language
// Specification.) So we use reflection.
Class _socketClass = Class.forName("java.net.Socket");
Class _socketAddressClass = Class.forName("java.net.SocketAddress");
Class _connectMethod = _socketClass.getMethod("connect",
new Class[] { _socketAddressClass, Integer.TYPE });
Class socketAddress =
Class.forName("java.net.InetSocketAddress");
Class _inetAddressConstructor =
socketAddress.getConstructor(new Class[] {
String.class, Integer.TYPE
});
try {
Socket ret = (Socket)_socketClass.newInstance();
Object addr = _inetAddressConstructor.newInstance( new Object[] { host, new Integer(port) });
_connectMethod.invoke(ret, new Object[] { addr, new Integer(timeout) }); return ret; } catch (InvocationTargetException e) { Throwable e2 = e.getTargetException(); throw (IOException)e2; } catch(InstantiationException e) { } catch(IllegalAccessException e) { }
Thanks, Sam
On Thursday, April 8, 2004, at 03:22 PM, Oleg Kalnichevski wrote:
Gil, (1) First and foremost DO reuse HttpClient instances when using multi-threaded connection manager. HttpClient class is thread-safe. In fact there are no known problems with having just one instance of HttpClient per application. Using a new instance of HttpClient for processing each request totally defeats all the performance optimizations we have built into HttpClient
(2) Use multi-threaded connection manager in case you do not
(3) Disable stale connection check
(4) Do not use connect timeout which causes a controller thread to be spawned per connection attempt
Oleg
On Thu, 2004-04-08 at 21:02, Alvarez, Gil wrote:We recently ported our url-hitting code from using java.net.* code to
httpclient code. We use it in a high-volume environment (20 machines are
hitting an external 3rd party to retrieve images).
After the port, we saw a significant increase in cycles used by the machines, about 2-3 times (ie, the load on the boxes increased from using up 20% of the cpu, to about 50%-60% of the cpu.
For each request, we instantiate an HttpClient object, and a GetMethod object, and shut things down afterwards.
In order to reduce the use of cycles, what is the recommended approach?
Thank you.
---------------------------------------------------------------------
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]