From 2350cc137c7ccace8ef93930610c43c4695c5d5c Mon Sep 17 00:00:00 2001 From: idlewis Date: Mon, 10 Feb 2025 15:12:29 +0000 Subject: [PATCH 1/2] Fully read heartbeat stream in RESTMBeanServerConnection The server response to the heartbeat/notification request is the class name string 'com.ibm.ws.kernel.boot.jmx.internal.PlatformMBeanServer'. This needs to be read, and the stream closed, to allow the HTTPURLConnection to be properly pooled/reused. Not reading the stream was causing dangling sockets in close_wait state --- .../client/rest/internal/RESTMBeanServerConnection.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/dev/com.ibm.ws.jmx.connector.client.rest/src/com/ibm/ws/jmx/connector/client/rest/internal/RESTMBeanServerConnection.java b/dev/com.ibm.ws.jmx.connector.client.rest/src/com/ibm/ws/jmx/connector/client/rest/internal/RESTMBeanServerConnection.java index d63b5ada5d2d..0736f316aad9 100644 --- a/dev/com.ibm.ws.jmx.connector.client.rest/src/com/ibm/ws/jmx/connector/client/rest/internal/RESTMBeanServerConnection.java +++ b/dev/com.ibm.ws.jmx.connector.client.rest/src/com/ibm/ws/jmx/connector/client/rest/internal/RESTMBeanServerConnection.java @@ -12,6 +12,7 @@ *******************************************************************************/ package com.ibm.ws.jmx.connector.client.rest.internal; +import java.io.InputStream; import java.io.IOException; import java.io.OutputStream; import java.net.ConnectException; @@ -2377,6 +2378,13 @@ public void run() { } } else { //no-op for failover polling, just break into the sleep segment + // Server sends a string back that needs to be consumed to close the connection + InputStream is = connection.getInputStream(); + int data = is.read(); + while (data != -1) { + data = is.read(); + } + is.close(); } break; } catch (ClassNotFoundException cnf) { From ba3ad5b27bda366d22d40f5d790938e47a26c25d Mon Sep 17 00:00:00 2001 From: idlewis Date: Thu, 13 Feb 2025 11:35:45 +0000 Subject: [PATCH 2/2] Do a better fix --- .../rest/internal/RESTMBeanServerConnection.java | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/dev/com.ibm.ws.jmx.connector.client.rest/src/com/ibm/ws/jmx/connector/client/rest/internal/RESTMBeanServerConnection.java b/dev/com.ibm.ws.jmx.connector.client.rest/src/com/ibm/ws/jmx/connector/client/rest/internal/RESTMBeanServerConnection.java index 0736f316aad9..0bbe20681674 100644 --- a/dev/com.ibm.ws.jmx.connector.client.rest/src/com/ibm/ws/jmx/connector/client/rest/internal/RESTMBeanServerConnection.java +++ b/dev/com.ibm.ws.jmx.connector.client.rest/src/com/ibm/ws/jmx/connector/client/rest/internal/RESTMBeanServerConnection.java @@ -2379,12 +2379,12 @@ public void run() { } else { //no-op for failover polling, just break into the sleep segment // Server sends a string back that needs to be consumed to close the connection - InputStream is = connection.getInputStream(); - int data = is.read(); - while (data != -1) { - data = is.read(); + try (InputStream is = connection.getInputStream()) { + int data = is.read(); + while (data != -1) { + data = is.read(); + } } - is.close(); } break; } catch (ClassNotFoundException cnf) {