Regarding point 4, it might be worthwhile to use reflection on newer JVMs so that the controller thread isn't necessary. An example of this is:

//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]



Reply via email to