I presume you are reusing/pooling your client connections, right?
Also - you could tune your OS to shutdown connections faster. You can
easily google you issue.

Stefan

2015-06-04 17:51 GMT+02:00 Check Peck <[email protected]>:

> I am using Spring RestTemplate to make a HTTP Calls to my RestService. I am
> using spring framework 3.1.1 version of RestTemplate. I cannot upgrade this
> since that's what we are using in our company.
>
> Now machine which is running my code (which uses RestTemplate) to make call
> to my RestService, I see lot of TIME_WAIT connections opened on that
> particular machine?
>
> - Is there any reason why it happens with RestTemplate or the way I am
> using it?
> - Also, what is the connection between TIME_WAIT and HTTP Client calls to
> my RestService? I am not able to understand this as well. Does HTTP Calls
> has any significance on TIME_WAIT? There might be some theoretical
> explanation for this I guess.
>
> Below is how I am using RestTemplate in my code base:
>
>     public class DataClient implements Client {
>
>         private final RestTemplate restTemplate = new RestTemplate();
>         private ExecutorService executor =
> Executors.newFixedThreadPool(10);
>
>         // for synchronous call
>         @Override
>         public String getSyncData(DataKey key) {
>             String response = null;
>             Future<String> handler = null;
>             try {
>                 handler = getAsyncData(key);
>                 response = handler.get(key.getTimeout(),
> TimeUnit.MILLISECONDS);
>             } catch (TimeoutException ex) {
>                 // log an exception
>                 handler.cancel(true);
>             } catch (Exception ex) {
>                 // log an exception
>             }
>
>             return response;
>         }
>
>         // for asynchronous call
>         @Override
>         public Future<String> getAsyncData(DataKey key) {
>             Future<String> future = null;
>
>             try {
>                 Task task = new Task(key, restTemplate);
>                 future = executor.submit(task);
>             } catch (Exception ex) {
>                 // log an exception
>             }
>
>             return future;
>         }
>     }
>
> And below is my simple Task class
>
>     class Task implements Callable<String> {
>
>         private final RestTemplate restTemplate;
>         private final DataKey key;
>
>         public Task(DataKey key, RestTemplate restTemplate) {
>             this.key = key;
>             this.restTemplate = restTemplate;
>         }
>
>         public String call() throws Exception {
>             ResponseEntity<String> response = null;
>
>             String url = "some_url_created_by_using_key";
>
>             // handling all try catch here
>             response = restTemplate.exchange(url, HttpMethod.GET, null,
> String.class);
>
>             return response.getBody();
>         }
>     }
>
> And here is netstat details on my box which is running my code to make HTTP
> Calls to my RestService. I am always seeing very high number of TIME_WAIT
> connections.
>
>          72 ESTABLISHED
>           2 FIN_WAIT1
>          17 LISTEN
>        3405 TIME_WAIT
>



-- 
BEKK Open
http://open.bekk.no

TesTcl - a unit test framework for iRules
http://testcl.com

Reply via email to