By default the JMX client side notification fetch timeout (jmx.remote.x.notification.fetch.timeout) is 1 minute and the default server connection timeout (jmx.remote.x.server.connection.timeout) is 2 minutes. If the client side connector thread makes a notification fetch request to the server, but a transient network problem prevents the server response from reaching the client, the client side connector will wait for a response until the timeout period (1 minute) has expired before throwing an IOException. The client side RMIConnector implementation handles the IOException, by re-checking the connection status to understand whether or not it is broken. If the connection is available at that moment, the connector fails by re-throwing the initial IOException. The problem is that this re-check of the connection passes because the server side of the connection doesn't time out until 2 minutes has passed (by default) - the NotifFetcher thread dies without posting a failed notification, and the client application does not get a chance to recover.
|