hc-httpclient-users mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Christopher BROWN <br...@reflexe.fr>
Subject Re: Slow connection and timeouts when using localhost on macOS with Java / HTTP when network disconnected
Date Tue, 14 Feb 2017 14:05:53 GMT

The problem, if I understand correctly, is to do with the way Java resolves
hostnames, which takes a long time with the default macOS Sierra
configuration.  In short, adding "computername.local" (as display in
Network Preferences when you've got a Mac) beside "localhost", on the entry in /etc/hosts -- as described here:
http://stackoverflow.com/a/41847289 -- fixed the problem.

Hope that helps anyone else discovering this message, even if it's not
directly related to HTTP Client (even although that's where I hit the


On 2 February 2017 at 22:49, Christopher BROWN <brown@reflexe.fr> wrote:

> Hello,
> I've noticed (as of today, when running a demo for a customer) that, with
> Java 8 (u121) on macOS Sierra, when both wi-fi is disconnected and no
> ethernet is available, Java network performance is slow.  The problem
> occurs when I have one application (Tomcat) being called by another (Java,
> using HTTP Client 4.3.x to connect to Tomcat, and also embedding a Jetty
> server, on a different port to Tomcat).  Both applications connect to a
> PostgreSQL database using the TCP/IP-based JDBC driver, where the database
> is in a VirtualBox VM on the same machine, using NAT to access it locally
> on port 5432.
> Starting Tomcat (bound to localhost:8080) is slow, as is starting the
> embedded Jetty server.  I suspect this is either Java or the MacOS
> networking stack being inefficient about resolving "localhost" when there's
> no network or DNS (but, I also tried using instead of localhost,
> and didn't get any improvement).  Both eventually bind (after about 15
> seconds) to server sockets then respond promptly when say accessing content
> with a local web browser.  But Java calls to localhost:8080 are so slow,
> that they just time out (I could I suppose set a really long timeout, but
> performance would be totally unacceptable).
> I don't think it's HTTP client's fault, but I can't think of how to set
> things up for acceptable performance.  For what it's worth, I've copied a
> stacktrace below, but I'm really looking for advice about how to improve
> things (I didn't see anything helpful in Java's networking properties, and
> the fact that didn't help is odd).  Reconnecting to a network
> instantly solves the problem, but that's not always an option (when I
> develop during travel, for example).
> Any advice ?  Thanks in advance.
> java.net.SocketTimeoutException: Read timed out
> at java.net.SocketInputStream.socketRead0(Native Method)
> at java.net.SocketInputStream.socketRead(SocketInputStream.java:116)
> at java.net.SocketInputStream.read(SocketInputStream.java:171)
> at java.net.SocketInputStream.read(SocketInputStream.java:141)
> at org.apache.http.impl.conn.LoggingInputStream.read(
> LoggingInputStream.java:87)
> at org.apache.http.impl.io.SessionInputBufferImpl.streamRead(
> SessionInputBufferImpl.java:136)
> at org.apache.http.impl.io.SessionInputBufferImpl.fillBuffer(
> SessionInputBufferImpl.java:152)
> at org.apache.http.impl.io.SessionInputBufferImpl.readLine(
> SessionInputBufferImpl.java:270)
> at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(
> DefaultHttpResponseParser.java:140)
> at org.apache.http.impl.conn.DefaultHttpResponseParser.parseHead(
> DefaultHttpResponseParser.java:57)
> at org.apache.http.impl.io.AbstractMessageParser.parse(
> AbstractMessageParser.java:260)
> at org.apache.http.impl.DefaultBHttpClientConnection.
> receiveResponseHeader(DefaultBHttpClientConnection.java:161)
> at org.apache.http.impl.conn.CPoolProxy.receiveResponseHeader(
> CPoolProxy.java:153)
> at org.apache.http.protocol.HttpRequestExecutor.doReceiveResponse(
> HttpRequestExecutor.java:271)
> at org.apache.http.protocol.HttpRequestExecutor.execute(
> HttpRequestExecutor.java:123)
> at org.apache.http.impl.execchain.MainClientExec.
> execute(MainClientExec.java:254)
> at org.apache.http.impl.execchain.ProtocolExec.
> execute(ProtocolExec.java:195)
> at org.apache.http.impl.client.InternalHttpClient.doExecute(
> InternalHttpClient.java:184)
> at org.apache.http.impl.client.CloseableHttpClient.execute(
> CloseableHttpClient.java:82)
> at org.apache.http.impl.client.CloseableHttpClient.execute(
> CloseableHttpClient.java:106)
> at vsh.system.connector.NetworkDriver.ping(NetworkDriver.java:1081)
> --
> Christopher

  • Unnamed multipart/alternative (inline, None, 0 bytes)
View raw message