Uploaded image for project: 'Remoting JMX'
  1. Remoting JMX
  2. REMJMX-52

Background org.xnio.nio.WorkerThread prevents JVM shutdown (using jboss-client.jar for remote JMX access)

    XMLWordPrintable

Details

    • Bug
    • Resolution: Done
    • Major
    • 1.0.5.Final, 1.1.0.Beta1
    • None
    • None
    • None

    Description

      I'm using the "jboss-client.jar" provided in the "bin/client" directory of the 7.1.1.Final distribution.

      I'm using the code shown below to connect to various JBoss 7.1.1 instances.
      This works when the machines are reachable.

      However, when they are not, the underlying "xnio" libraries do not clean up properly.

      Observed results: client JVM running my JMX code does not exit, since the background threads from xnio are non-deamon.

      I've attached stackdumps from both Windows and Linux x64 demonstrating the problem.

      Here's a link to a report from Red Hat engineer Rob Stryker on the "jboss-as7-dev" mailing list, essentially confirming the problems I report with such a trivial, minimal JMX client.
      http://lists.jboss.org/pipermail/jboss-as7-dev/2012-March/005679.html

      ----------------------------------------------

      import java.io.IOException;
      import java.net.MalformedURLException;
      import java.util.HashMap;
      
      import javax.management.MBeanServerConnection;
      import javax.management.remote.JMXConnector;
      import javax.management.remote.JMXConnectorFactory;
      import javax.management.remote.JMXServiceURL;
      
      public class Demo {
      	public static void main(String[] args) throws IOException {
      		JMXConnector jmxConnector = null;
      
      		String host = "some.unreachable.host";
      		String port = "9999";
      		String urlString = "service:jmx:remoting-jmx://" + host + ":" + port;
      		try {
      			JMXServiceURL serviceURL = new JMXServiceURL(urlString);
      			HashMap<String, String[]> env = new HashMap<String, String[]>();
      			String[] creds = new String[2];
      			creds[0] = "username";
      			creds[1] = "password";
      			env.put(JMXConnector.CREDENTIALS, creds);
      			jmxConnector = JMXConnectorFactory.connect(serviceURL, env);
      			MBeanServerConnection connection = jmxConnector.getMBeanServerConnection();
      			System.out.println("Successfully Got Connection  " + connection.getMBeanCount());
      			jmxConnector.close();
      		} catch (MalformedURLException e) {
      			e.printStackTrace();
      		} catch (IOException e) {
      			e.printStackTrace();
      		} finally {
      			if (jmxConnector != null) {
      				jmxConnector.close();
      			}
      		}
      
      		System.exit(0);
      	}
      }

      Attachments

        Activity

          People

            sdouglas1@redhat.com Stuart Douglas
            taras.tielkes Taras Tielkes (Inactive)
            Votes:
            0 Vote for this issue
            Watchers:
            2 Start watching this issue

            Dates

              Created:
              Updated:
              Resolved: