UseJDK5JConsole

    Using the JDK5 JConsole JMX Console

    The jconsole utility that ships with the Sun JDK5 provides a new level of VM information. The configuration of jconsole is discussed here:

    http://java.sun.com/j2se/1.5.0/docs/guide/management/agent.html

     

    Another good overview is here:

    http://java.sun.com/developer/technicalArticles/J2SE/jconsole.html

     

    To use jconsole, obviously you need to be using a release version of jdk5+. See the JBoss vs Java JDK Version Matrix page for which jboss versions work with jdk5.

     

    Using VisualVM over JMX

    VisualVM is included in most JDK6 distributions including OpenJDK in Fedora Gnu/Linux.  VisualVM uses the same JMX mechanism to connect to a running VM as JConsole and provides many more features.

     

    Connecting to a Local Server

    For AS releases prior to 6 M3, enable the JMX agent for local access, set the  system property in the run.conf/run.bat script. For example, in run.conf:

     

    #
    # Specify options to pass to the Java VM.
    #
    if [ "x$JAVA_OPTS" = "x" ]; then
       JAVA_OPTS="-server -Xms128m -Xmx128m"
    fi
    
    # Enable the jconsole agent locally
    JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote"
    

     

    Next, launch jconsole, . This will bring up a java app with a connection dialog like:

     

    Connecting to a Remote Server

    jBoss must be run with the bindAddress configured to allow remote access. Typicaly, call run.sh -b 0.0.0.0.

     

    For AS releases prior to 6 M3, to enable monitoring and management from remote systems, set the  system property, where NNN is any free port number > 1024 in the run.conf/run.conf.bat script. For example, in run.conf:

     

    #
    # Specify options to pass to the Java VM.
    #
    if [ "x$JAVA_OPTS" = "x" ]; then
       JAVA_OPTS="-server -Xms128m -Xmx128m"
    fi
    
    # Enable the jconsole agent remotely on port 12345
    JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=12345"
    

     

    Note that this requires password security to be configured. To disable security and ssl transport, add two additional properties:

     

    # Enable the jconsole agent remotely on port 12345
    JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=12345"
    JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false"
    JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.ssl=false"
    

     

    To connect the jconsole to use specify the hostname:NNN combo for the server. NNN is the same port number specified in the system property, for example . You can also start jconsole and then use the Connection/New Connection... menu item to bring up a connect dialog:

     

    Connecting to a Remote JBossAS 6.x+ Server

    Since AS 6.x uses java.util.logging to capture log output from all logging systems, you must also make sure that you add jboss-logmanager.jar to the boot classpath and configure the JDK to use it immediately.  You can do this via one more change to run.conf:

     

    JAVA_OPTS="$JAVA_OPTS -Djava.util.logging.manager=org.jboss.logmanager.LogManager"
    JAVA_ARGS="$JAVA_OPTS -Dorg.jboss.logging.Logger.pluginClass=org.jboss.logging.logmanager.LoggerPluginImpl"
    JBOSS_CLASSPATH="lib/jboss-logmanager.jar"
    

     

    With this change, logging should work correctly.  WIthout this change, you'll get one or more message like this:

    Failed to initalize plugin: org.jboss.logging.logmanager.LoggerPluginImpl@359ecd80, cause: java.lang.IllegalStateException: The LogManager was not properly installed (you must set the "java.util.logging.manager" system property to "org.jboss.logmanager.LogManager")
    

     

    With AS 6.0 M3+, you can use the JSR-160 JMXConnector support:

     

    jconsole service:jmx:rmi:///jndi/rmi://hostname:rmiRegistryPort/jmxrmi
           or
    jconsole service:jmx:rmi:///jndi/rmi://SERVERHOSTNAMEorIP:1090/jmxrmi