How do you know the keepalive packets have not been sent? Did you run a tcpdump?
The socket API (java and apache) traditionally does not support to configure the keepalive times, they only allow to turn it on. BTW: still think tcp keepalives are not what you want to rely on and might not help to keep a connection open if an intermediate wants to be an annoyance. Greetings Bernd -- http://bernd.eckenfels.net -----Original Message----- From: Baratali Izmailov <baratal...@gmail.com> To: HttpClient User Discussion <httpclient-users@hc.apache.org> Sent: Mi., 18 Mai 2016 12:37 Subject: Re: Apache HttpClient TCP Keep-Alive (socket keep-alive) Thank you. I updated Apache HttpClient version as you described. However, it didn't help, TCP KeepAlive packets were not sent between client and server. If correctly understand, the problem is that I cannot edit TCP KeepAlive timouts in HttpClient or even in Apache httpd server. It works only if I set timeouts on OS level (in Linux): sudo sysctl -w net.ipv4.tcp_keepalive_time=60 sudo sysctl -w net.ipv4.tcp_keepalive_intvl=60 sudo sysctl -w net.ipv4.tcp_keepalive_probes=10 With such configs the server sends TCP KeepAlive packets every 60 seconds. Thanks, Baratali Izmailov. On 12 May 2016 at 15:53, Oleg Kalnichevski <ol...@apache.org> wrote: > On Thu, 2016-05-12 at 13:46 +0100, Baratali Izmailov wrote: > > > Please consider upgrading. I am not entirely sure if HC 4.2 supports > TCP keepalive > > setting. > > > > Unfortunately, to upgrade HC we need to upgrade Spring to the latest > > version which requires Java 8. But, we cannot force our clients to use > Java > > 8 yet. > > There is no need to upgrade Spring. You can upgrade HC dependency to > something more recent without upgrading Spring itself. > > In this case however you should pass a custom instance of HttpClient to > ClientHttpRequestFactory > > > https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/client/HttpComponentsClientHttpRequestFactory.html#HttpComponentsClientHttpRequestFactory-org.apache.http.client.HttpClient- > > > However, I don't see SO_KEEPALIVE parameter in the lastest Apache HC > > javadocs in "The following parameters can be used to customize the > behavior > > of this class:" section: > > > https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/client/DefaultHttpClient.html > > > > Could you please show me example how to set SO_KEEPALIVE parameter in new > > versions of Apache HC? > > > > --- > SocketConfig socketConfig = SocketConfig.custom() > .setSoKeepAlive(true) > .build(); > CloseableHttpClient client = HttpClientBuilder.create() > .setDefaultSocketConfig(socketConfig) > .build(); > ClientHttpRequestFactory clientfactory = new > HttpComponentsClientHttpRequestFactory(client); > --- > > Hope this helps > > Oleg > > > > Thanks, > > Baratali Izmailov. > > > > On 12 May 2016 at 09:53, Oleg Kalnichevski <ol...@apache.org> wrote: > > > > > On Thu, 2016-05-12 at 09:23 +0100, Baratali Izmailov wrote: > > > > Hello. Thanks for the quick response. > > > > > > > > > Is there any way you can turn this into 2 requests? > > > > For now we cannot split this into 2 HTTP requests, because we have to > > > > change client-server protocol communication and re-implement some > parts > > > of > > > > our application, which will take much time. > > > > I understand that it is not that effective to keep connection open > too > > > > long, but it's only simple solution I see for now. > > > > > > > > > What version of HttpClient are you using? It looks like something > > > fairly > > > > old. > > > > It is 4.2.2. Actually I use Spring 3.2.1 httpInvoker which uses > > > > DefaultHttpClient. > > > > > > > > > > Please consider upgrading. I am not entirely sure if HC 4.2 supports > TCP > > > keepalive setting. > > > > > > Oleg > > > > > > > > Using TCP keepalive wont help you with default OS settings, it > would > > > not > > > > start to send them in the first 20 idle minutes. > > > > Can I configure Apache httpd server to do this (set keep-alive > timeouts)? > > > > > > > > Thanks, > > > > Baratali. > > > > > > > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org > > > For additional commands, e-mail: httpclient-users-h...@hc.apache.org > > > > > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org > For additional commands, e-mail: httpclient-users-h...@hc.apache.org > > -----Original Message----- From: Baratali Izmailov <baratal...@gmail.com> To: HttpClient User Discussion <httpclient-users@hc.apache.org> Sent: Mi., 18 Mai 2016 12:37 Subject: Re: Apache HttpClient TCP Keep-Alive (socket keep-alive) Thank you. I updated Apache HttpClient version as you described. However, it didn't help, TCP KeepAlive packets were not sent between client and server. If correctly understand, the problem is that I cannot edit TCP KeepAlive timouts in HttpClient or even in Apache httpd server. It works only if I set timeouts on OS level (in Linux): sudo sysctl -w net.ipv4.tcp_keepalive_time=60 sudo sysctl -w net.ipv4.tcp_keepalive_intvl=60 sudo sysctl -w net.ipv4.tcp_keepalive_probes=10 With such configs the server sends TCP KeepAlive packets every 60 seconds. Thanks, Baratali Izmailov. On 12 May 2016 at 15:53, Oleg Kalnichevski <ol...@apache.org> wrote: > On Thu, 2016-05-12 at 13:46 +0100, Baratali Izmailov wrote: > > > Please consider upgrading. I am not entirely sure if HC 4.2 supports > TCP keepalive > > setting. > > > > Unfortunately, to upgrade HC we need to upgrade Spring to the latest > > version which requires Java 8. But, we cannot force our clients to use > Java > > 8 yet. > > There is no need to upgrade Spring. You can upgrade HC dependency to > something more recent without upgrading Spring itself. > > In this case however you should pass a custom instance of HttpClient to > ClientHttpRequestFactory > > > https://docs.spring.io/spring/docs/current/javadoc-api/org/springframework/http/client/HttpComponentsClientHttpRequestFactory.html#HttpComponentsClientHttpRequestFactory-org.apache.http.client.HttpClient- > > > However, I don't see SO_KEEPALIVE parameter in the lastest Apache HC > > javadocs in "The following parameters can be used to customize the > behavior > > of this class:" section: > > > https://hc.apache.org/httpcomponents-client-ga/httpclient/apidocs/org/apache/http/impl/client/DefaultHttpClient.html > > > > Could you please show me example how to set SO_KEEPALIVE parameter in new > > versions of Apache HC? > > > > --- > SocketConfig socketConfig = SocketConfig.custom() > .setSoKeepAlive(true) > .build(); > CloseableHttpClient client = HttpClientBuilder.create() > .setDefaultSocketConfig(socketConfig) > .build(); > ClientHttpRequestFactory clientfactory = new > HttpComponentsClientHttpRequestFactory(client); > --- > > Hope this helps > > Oleg > > > > Thanks, > > Baratali Izmailov. > > > > On 12 May 2016 at 09:53, Oleg Kalnichevski <ol...@apache.org> wrote: > > > > > On Thu, 2016-05-12 at 09:23 +0100, Baratali Izmailov wrote: > > > > Hello. Thanks for the quick response. > > > > > > > > > Is there any way you can turn this into 2 requests? > > > > For now we cannot split this into 2 HTTP requests, because we have to > > > > change client-server protocol communication and re-implement some > parts > > > of > > > > our application, which will take much time. > > > > I understand that it is not that effective to keep connection open > too > > > > long, but it's only simple solution I see for now. > > > > > > > > > What version of HttpClient are you using? It looks like something > > > fairly > > > > old. > > > > It is 4.2.2. Actually I use Spring 3.2.1 httpInvoker which uses > > > > DefaultHttpClient. > > > > > > > > > > Please consider upgrading. I am not entirely sure if HC 4.2 supports > TCP > > > keepalive setting. > > > > > > Oleg > > > > > > > > Using TCP keepalive wont help you with default OS settings, it > would > > > not > > > > start to send them in the first 20 idle minutes. > > > > Can I configure Apache httpd server to do this (set keep-alive > timeouts)? > > > > > > > > Thanks, > > > > Baratali. > > > > > > > > > > > > --------------------------------------------------------------------- > > > To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org > > > For additional commands, e-mail: httpclient-users-h...@hc.apache.org > > > > > > > > > > --------------------------------------------------------------------- > To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org > For additional commands, e-mail: httpclient-users-h...@hc.apache.org > > --------------------------------------------------------------------- To unsubscribe, e-mail: httpclient-users-unsubscr...@hc.apache.org For additional commands, e-mail: httpclient-users-h...@hc.apache.org