Details
Description
HttpConduit should flush output stream ahead of closing connections when HttpClient is autocloseable.
When running WebClient in a load test (single host) we'll observe low throughput.
When we adjust the HttpConduit to flush output stream ahead of connection close, we observe significant throughput improvement.
The key issue being addressed here is ephemeral port usage. Once all available ports are in use, the clients are unable to send more messages.
Controlling ephemeral port usage means the client can more often send messages to the server-side.
Given this appears to affect just autocloseable HttpClient, we select to flush the output stead only when the JVM provides the autocloseable HttpClient variety.
AbstractConduit:
finally {
OutputStream os = msg.getContent(OutputStream.class);
// Java 21 may hang on close, we flush stream to help close them out.
if (os != null && AutoCloseable.class.isAssignableFrom(HttpClient.class))
super.close(msg);
}
Attachments
Issue Links
- links to