Connections leaking with state CLOSE_WAIT with HttpClient
Submitted and confirmed as a bug in the implementation.
https://bugs.openjdk.java.net/browse/JDK-8221395
Update
Check the JIRA issue, it's fixed in JDK 13, and backported to 11.0.6. (Not sure about 12)
I wouldn't recommend creating a new client for every new request. This is defeating the purpose of HTTP/2 which allows multiplexing requests on a single connection.
The second thing is that the two properties:
System.setProperty("jdk.httpclient.keepalive.timeout", "5"); // seconds
System.setProperty("jdk.httpclient.connectionPoolSize", "1");
only apply to HTTP/1.1 connections, not HTTP/2. Also take care that these properties are only read once at class loading time. So setting them after
the java.net.http
classes have been loaded will have no effect.
Finally it may take some time after an HttpClient
is released before all kept alive connections are closed - the internal mechanism to do so is basically relying on GC - and this is not very friendly with short lived HttpClients.