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:
Another good overview is here:
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
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: