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
