hc-httpclient-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Oleg Kalnichevski <ol...@apache.org>
Subject Re: Connection Reset errors
Date Fri, 18 Jan 2013 11:16:59 GMT
On Thu, 2013-01-17 at 16:41 -0500, Mark Claassen wrote:
> Thanks for the explanation.
> > pro-actively evicting expired connections and connections that have been idle
> Seems like just doing the stale check would more reliable, and speed does not seem to
be a factory (especially with 4.2.3)
> 
> I got in configured and distributed to this user and she is still having the same problem.
 Any other ideas?  I double checked my code, and it looks like everything is correct.  (She
is not using a proxy.)
> 

This can also be genuine network stability issues. Essentially,
connection resets are inevitable and robust HTTP services have to be
prepared to deal with them (most likely by re-trying idempotent methods
automatically and reporting the problem back to the caller otherwise).

Oleg 


> 
> 	Method that makes the request (from multiple threads)
> 	{
> 		response = httpClient.execute(request);
> 	}
> 	Bulk of configuration method (MAX is 10, CONNECTION_ESTABLISH_TIMEOUT = 10)
> 	{
> 			HttpParams params = new BasicHttpParams();
> 			params.setIntParameter(AllClientPNames.SO_TIMEOUT, (int) new TimeSpan(45, TimeUnit.SECONDS).convertTo(TimeUnit.MILLISECONDS));
> 			params.setIntParameter(AllClientPNames.CONNECTION_TIMEOUT, CONNECTION_ESTABLISH_TIMEOUT
* 1000);
> 			params.setIntParameter(AllClientPNames.SOCKET_BUFFER_SIZE, DEFAULT_HTTP_SOCKET_BUFFER_SIZE);
> 			params.setBooleanParameter(AllClientPNames.STALE_CONNECTION_CHECK, Boolean.TRUE);
> 			configureProxy(params,protocol);
> 
> 			connectionManager = new PoolingClientConnectionManager(schemeRegistry);
> 			connectionManager.setDefaultMaxPerRoute(MAX);
> 			connectionManager.setMaxTotal(MAX);
> 
> 			httpClient = new DefaultHttpClient(connectionManager, params);
> 	}
> 	private void configureProxy(HttpParams params, String scheme) {
> 		Proxy proxy = getProxy();
> 		if (proxy.type() != Proxy.Type.DIRECT) {
> 			InetSocketAddress address = (InetSocketAddress) proxy.address();
> 			//SSL or not, we set the proxy up as HTTP
> 			HttpHost httpProxy = new HttpHost(address.getHostName(), address.getPort(), SCHEME_HTTP);
> 			params.setParameter(AllClientPNames.DEFAULT_PROXY, httpProxy);
> 			LogManager.log("Setting proxy in HostConfig to " + address, Level.INFO);
> 			if (!scheme.equals(SCHEME_HTTP)) {
> 				//If the scheme is HTTPS, we need to register an HTTP scheme for the proxy.
> 				schemeRegistry.register(new Scheme(SCHEME_HTTP,address.getPort(),PlainSocketFactory.getSocketFactory()));
> 			}
> 		}
> 
> 	}
> 
> -----Original Message-----
> From: Oleg Kalnichevski [mailto:olegk@apache.org] 
> Sent: Thursday, January 17, 2013 7:21 AM
> To: HttpClient User Discussion
> Subject: Re: Connection Reset errors
> 
> On Wed, 2013-01-16 at 15:22 -0500, Mark Claassen wrote:
> 
> Basically 'connection reset' errors are a direct result of a general limitation of the
blocking I/O model: when not blocked in an I/O operation there is no way for the socket to
get notified of the opposite endpoint terminating the connection. While kept alive in the
pool blocking HTTP connections can get stale. However, the only way to find it out is to try
to attempt an I/O operation on such connection.
> 
> > I noticed that there is a stale connection check:
> > params.setBooleanParameter(AllClientPNames.STALE_CONNECTION_CHECK, 
> > Boolean.TRUE);
> > 
> > Is this something that I should be using?  I am connecting to the same source over
and over again.
> > 
> > Mark
> > 
> 
> Yes, this is what you should be using. Another alternative would be pro-actively evicting
expired connections and connections that have been idle longer than a given period of time.
> 
> Oleg
> 
> 
> > -----Original Message-----
> > From: Mark Claassen [mailto:mac01@donnell.com]
> > Sent: Wednesday, January 16, 2013 3:07 PM
> > To: 'HttpClient User Discussion'
> > Subject: Connection Reset errors
> > 
> > I have a user getting a lot of Connection Reset errors.  I did not 
> > think this had do to with HttpClient, so much as other factors on her 
> > machine and the server.  However, I did a bit of searching and see that people have
commented on this error with HttpClient before.  I just upgraded to HttpClient 4.2.3 to see
if that would help at all, and it didn't.
> > 
> > This user is fine for a while, and then will get the Connection Reset 
> > error.  She then just retries the request, and it works.  Any tips on how to resolve
this would be greatly appreciated.
> > 
> > Thanks,
> > Mark
> > 
> > We are using Tomcat 7.0.27, and the Connector is configured like this:
> >                 <Connector
> >                         port="5502"
> >                         protocol="org.apache.coyote.http11.Http11NioProtocol"
> >                         server="Unknown"
> >                         connectionLinger="0"
> >                         socket.soTimeout="300000"
> >                         SSLEnabled="true"
> >                         maxThreads="150"
> >                         scheme="https"
> >                         secure="true"
> >                         clientAuth="false"
> >                         keystoreFile="-----"
> >                         keystoreType="PKCS12"
> >                         keystorePass="-----"
> >                         sslProtocol="TLS"
> >  
> > ciphers="SSL_RSA_WITH_RC4_128_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_DHE
> > _RSA_WITH_AES_128_CBC_SHA,TLS_DHE_DSS_WITH_AES
> > _128_CBC_SHA,SSL_RSA_WITH_3DES_EDE_CBC_SHA,SSL_DHE_RSA_WITH_3DES_EDE_C
> > BC_SHA,SSL_DHE_DSS_WITH_3DES_EDE_CBC_SHA"/>
> > 
> > 
> > ---- (1) ---- Throwable - Class (class java.net.SocketException)
> >    Message (Connection reset)
> >    at java.net.SocketInputStream.read(Unknown Source)
> >    at com.sun.net.ssl.internal.ssl.InputRecord.readFully(Unknown Source)
> >    at com.sun.net.ssl.internal.ssl.InputRecord.read(Unknown Source)
> >    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readRecord(Unknown Source)
> >    at com.sun.net.ssl.internal.ssl.SSLSocketImpl.readDataRecord(Unknown Source)
> >    at com.sun.net.ssl.internal.ssl.AppInputStream.read(Unknown Source)
> >    at org.apache.http.impl.io.AbstractSessionInputBuffer.fillBuffer(AbstractSessionInputBuffer.java:166)
> >    at org.apache.http.impl.io.SocketInputBuffer.fillBuffer(SocketInputBuffer.java:90)
> >    at org.apache.http.impl.io.AbstractSessionInputBuffer.read(AbstractSessionInputBuffer.java:212)
> >    at org.apache.http.impl.io.ChunkedInputStream.read(ChunkedInputStream.java:177)
> >    at 
> > org.apache.http.conn.EofSensorInputStream.read(EofSensorInputStream.ja
> > va:138)
> > 
> > 
> > 
> > 
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
> > For additional commands, e-mail: httpclient-users-help@hc.apache.org
> > 
> > 
> > ---------------------------------------------------------------------
> > To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
> > For additional commands, e-mail: httpclient-users-help@hc.apache.org
> > 
> 
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
> For additional commands, e-mail: httpclient-users-help@hc.apache.org
> 
> 
> ---------------------------------------------------------------------
> To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
> For additional commands, e-mail: httpclient-users-help@hc.apache.org
> 



---------------------------------------------------------------------
To unsubscribe, e-mail: httpclient-users-unsubscribe@hc.apache.org
For additional commands, e-mail: httpclient-users-help@hc.apache.org


Mime
View raw message