You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@hc.apache.org by "Santhosh Sheshasayanan (JIRA)" <ji...@apache.org> on 2018/05/02 02:41:00 UTC

[jira] [Commented] (HTTPCLIENT-1918) CLOSE_WAIT issue in HttpClient

    [ https://issues.apache.org/jira/browse/HTTPCLIENT-1918?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=16460448#comment-16460448 ] 

Santhosh Sheshasayanan commented on HTTPCLIENT-1918:
----------------------------------------------------

Hi Oleg,

My intention is not just blindly reopen the case. I'm seeking help from experts like you. As I mentioned earlier, We are using "*Response handlers*"  mechanism to deal with connection management. I read in the Apache tutorial about "Response handlers". Its much clear that, connection management job is being done by "Response handlers" no matter execution get success or exception. 

I have given snapshot below for reference. 

!image-2018-05-01-19-34-15-096.png!

Please help me to resolve the issue.

 

Thanks,

Santhosh S

> CLOSE_WAIT issue in HttpClient
> ------------------------------
>
>                 Key: HTTPCLIENT-1918
>                 URL: https://issues.apache.org/jira/browse/HTTPCLIENT-1918
>             Project: HttpComponents HttpClient
>          Issue Type: Bug
>          Components: HttpClient (async)
>    Affects Versions: 4.5.5
>            Reporter: Santhosh Sheshasayanan
>            Priority: Major
>         Attachments: Capture-0.PNG, Capture-1.PNG, Capture.PNG, IdleConnectionMonitorThread.java, close_wait.log, frt-acs03-netstat.log, image-2018-05-01-19-34-15-096.png
>
>
> We are facing CLOSE_WAIT issue in our production system on heavy load. We are using Apache's httpClient 4.5.5 and httpcore 4.4.9 in our code. Sometime the server sends half of the data; sometime server sends no data and close the connection at their end. Now, httpclient puts the socket connection to CLOSE_WAIT indefinitely. 
> We tried the following but nothing helped us.
>  * Set TTL to 1 minutes in PoolingHttpClientConnectionManager
>  * Used the following methods
>  ** evictExpiredConnections()
>  ** evictIdleConnections(5, TimeUnit._SECONDS_)
>  ** [https://hc.apache.org/httpcomponents-client-ga/tutorial/html/connmgmt.html|https://apac01.safelinks.protection.outlook.com/?url=https%3A%2F%2Fhc.apache.org%2Fhttpcomponents-client-ga%2Ftutorial%2Fhtml%2Fconnmgmt.html&data=02%7C01%7Ckumaran.ae%40hcl.com%7Ce88009e18e4145e27ebc08d5aa2ae38c%7C189de737c93a4f5a8b686f4ca9941912%7C0%7C0%7C636602023532727032&sdata=2s0L63M%2F%2F7slLF3Uhx2Ly2SHSiknz0hA4fF8wDvxbS0%3D&reserved=0]
>  *** Topic "2.5. Connection eviction policy"
>  *** Topic "2.6. Connection keep alive strategy"
>    Later, we found the method "setValidateAfterInactivity". Its description says "This check helps detect connections that have become stale (half-closed) while kept inactive in the pool". So we thought it will help us to detect and close the socket which are in "CLOSE_WAIT" state. But it did not help us.
> Problem here, The HTTP client puts the socket into "CLOSE_WAIT" state and waiting for the signal from server to close the socket. But the server closed the connection already.  Please suggest us how to handle/resolve the issue?
>  
> +*Scala Code Snippet*+
> private val clientConnectionManager =
> { val clientConnectionManager = new PoolingHttpClientConnectionManager(1, java.util.concurrent.TimeUnit.MINUTES); clientConnectionManager.setMaxTotal(cfg.connectionPoolSize) clientConnectionManager.setDefaultMaxPerRoute(cfg.connectionPoolSize) clientConnectionManager.setValidateAfterInactivity(30000);
> clientConnectionManager }
> *val monitorThread = new IdleConnectionMonitorThread(clientConnectionManager);*
>  *monitorThread.start();*
>  
>  
>  



--
This message was sent by Atlassian JIRA
(v7.6.3#76005)

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