hc-httpclient-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Eugene Dvorkin <Eugene.Dvor...@ARTstor.org>
Subject Re: [Junk released by Allowed List] Re: HTTPClient stops working and produce java.net.ConnectException: Connection timed out exception
Date Mon, 07 May 2012 20:39:25 GMT
Hi Oleg,
thanks. I will investigate.
But is it matter in this particular case?


On 05/07/2012 03:01 PM, Sam Crawford wrote:
> I would suggest enabling wire-level debugging to get a clearer picture
> of what is taking place (see
> http://hc.apache.org/httpcomponents-client-ga/logging.html)
>
> That said, the symptoms lead me to think that you're running into
> Java's DNS caching behaviour. Amazon elastic load balancers frequently
> change IP address, and have a low TTL in DNS accordingly. Depending on
> your Java version and configuration, you may be caching DNS records
> indefinitely. If this was the case, then your JVM may have cached an
> old IP address for your Amazon ELB and HttpClient is dutifully trying
> to connect to this old IP address that is no longer running your
> remote service.
>
> You could verify this on your production server (in a non-invasive
> way) by running tcpdump to look at what IP address your application is
> trying to connect to.
>
> Java 6 DNS options are detailed at
> http://docs.oracle.com/javase/6/docs/technotes/guides/net/properties.html
> (networkaddress.cache.ttl is the property in particular I'm referring
> to).
>
> Hope this helps,
>
> Sam
>
>
> On 7 May 2012 19:42, Eugene Dvorkin<Eugene.Dvorkin@artstor.org>  wrote:
>> I have a client application that makes http calls to another servers
>> using http client library (httpclient-4.1.3.jar) . Application was
>> deployed to 5 servers and it was working for a while. All those 5
>> servers are behind load balancer and firewall in data center. This
>> application is a web application using Spring framework.  The end point,
>> to where the application is making http requests, are deployed on Amazon
>> EC2 instances behind amazon load balancer.
>> Today I start experience problems:
>>
>> 12/05/07 10:03:48 java.net.ConnectException: Connection timed out
>> 12/05/07 10:03:48       at java.net.PlainSocketImpl.socketConnect(Native
>> Method)
>> 12/05/07 10:03:48       at
>> java.net.PlainSocketImpl.doConnect(PlainSocketImpl.java:333)
>> 12/05/07 10:03:48       at
>> java.net.PlainSocketImpl.connectToAddress(PlainSocketImpl.java:195)
>> 12/05/07 10:03:48       at
>> java.net.PlainSocketImpl.connect(PlainSocketImpl.java:182)
>> 12/05/07 10:03:48       at
>> java.net.SocksSocketImpl.connect(SocksSocketImpl.java:366)
>> 12/05/07 10:03:48       at java.net.Socket.connect(Socket.java:507)
>> 12/05/07 10:03:48       at java.net.Socket.connect(Socket.java:457)
>> 12/05/07 10:03:48       at java.net.Socket.<init>(Socket.java:365)
>> 12/05/07 10:03:48       at java.net.Socket.<init>(Socket.java:238)
>> 12/05/07 10:03:48       at
>> org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java
>> :79)
>> 12/05/07 10:03:48       at
>> org.apache.commons.httpclient.protocol.DefaultProtocolSocketFactory.createSocket(DefaultProtocolSocketFactory.java
>> :121)
>> 12/05/07 10:03:48       at
>> org.apache.commons.httpclient.HttpConnection.open(HttpConnection.java:706)
>> 12/05/07 10:03:48       at
>> org.apache.commons.httpclient.HttpMethodDirector.executeWithRetry(HttpMethodDirector.java:386)
>> 12/05/07 10:03:48       at
>> org.apache.commons.httpclient.HttpMethodDirector.executeMethod(HttpMethodDirector.java:170)
>> 12/05/07 10:03:48       at
>> org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:396)
>> 12/05/07 10:03:48       at
>> org.apache.commons.httpclient.HttpClient.executeMethod(HttpClient.java:324)
>> 12/05/07 10:03:48       at
>> org.artstor.security.acegi.ui.SamlAuthenticationProcessingFilter.makeHttpsRequest(SamlAuthenticationProcessingFilt
>> er.java:377)
>>
>> On receiving end, I don't see any log in Apache access logs.
>> If I do curl to the same URL, It works fine. Nobody changed any
>> configuration or anything like that.
>> How can I drill down and debug the issue? It makes more complicated
>> because it is on production server but this functionality is not
>> released yet.
>> Any ideas?
>> httpclient-4.1.3.jar
>> httpclient-cache-4.1.3.jar
>> httpcore-4.1.4.jar
>> httpmime-4.1.3.jar
>>
>>
>> Our code:
>> public byte[] makeHttpsRequest(String url) {
>>          byte[] responseBody = null;
>>
>>
>>          HttpClient httpClient=new HttpClient();
>>
>>          HttpMethod method = new GetMethod(url);
>>
>>          HttpMethodRetryHandler myretryhandler = new
>> HttpMethodRetryHandler() {
>>              public boolean retryMethod(
>>                  final HttpMethod method,
>>                  final IOException exception,
>>                  int executionCount) {
>>                  if (executionCount>= 3) {
>>                      // Do not retry if over max retry count
>>                      return false;
>>                  }
>>                  if (exception instanceof NoHttpResponseException) {
>>                      // Retry if the server dropped connection on us
>>                      return true;
>>                  }
>>                  if (exception instanceof IOException) {
>>                                      // Retry if read timeout happens
>>                       return true;
>>                                  }
>>                  if (!method.isRequestSent()) {
>>                      // Retry if the request has not been sent fully or
>>                      // if it's OK to retry methods that have been sent
>>                      return true;
>>                  }
>>                  // otherwise do not retry
>>                  return false;
>>              }
>>          };
>>
>>
>>
>>
>>          // Provide custom retry handler is necessary
>>
>> method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,myretryhandler);
>>
>>              try {
>>                  HttpClientParams param=new HttpClientParams();
>>                  param.setSoTimeout(3000);
>>                  httpClient.setParams(param);
>>                  method.addRequestHeader("Accept",
>> "text/html,application/xhtml+xml,application/xml,application/json");
>>                  // Provide custom retry handler is necessary
>>
>> method.getParams().setParameter(HttpMethodParams.RETRY_HANDLER,
>>                          new DefaultHttpMethodRetryHandler(3, false));
>>
>>                  int statusCode = httpClient.executeMethod(method);
>>                  if (statusCode != HttpStatus.SC_OK) {
>>                      System.err.println("Method failed: " +
>> method.getStatusLine());
>>                    }
>>
>>
>>
>>                      responseBody = method.getResponseBody();
>>
>>              } catch (SocketTimeoutException e) {
>>
>>                  System.err.println("can't connect to shibboleth server: "
>>                                      + e.getMessage());
>>                              e.printStackTrace();
>>              } catch (IOException e) {
>>
>>                  System.err.println("can't connect to shibboleth server: "
>>                          + e.getMessage());
>>                  e.printStackTrace();
>>
>>
>>
>>              } finally {
>>                  // When HttpClient instance is no longer needed,
>>                  // shut down the connection manager to ensure
>>                  // immediate deallocation of all system resources
>>
>>                  method.releaseConnection();
>>              }
>>
>>
>>          return responseBody;
>>      }
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>>
>> ---------------------------------------------------------------------
>> 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