Connect to JBoss 7 using VisualVM

15,644

Solution 1

Found a solution. I needed to add the following params to JAVA_OPTS in standalone.conf.bat:

-Dcom.sun.management.jmxremote.port=1090 ^
-Dcom.sun.management.jmxremote.authenticate=false ^
-Dcom.sun.management.jmxremote ^
-Dcom.sun.management.jmxremote.ssl=false ^
-Djava.util.logging.manager=org.jboss.logmanager.LogManager ^
-Xbootclasspath/p:<JBOSS_PATH>/modules/org/jboss/logmanager/main/jboss-logmanager-1.2.2.GA.jar ^
-Xbootclasspath/p:<JBOSS_PATH>/modules/org/jboss/logmanager/log4j/main/jboss-logmanager-log4j-1.0.0.GA.jar ^
-Xbootclasspath/p:<JBOSS_PATH>/modules/org/apache/log4j/main/log4j-1.2.16.jar -Djboss.modules.system.pkgs=org.jboss.logmanager

Note 1: Use \ instead of ^ on Unix.

Note 2: Replace <JBOSS_PATH> with your JBoss 7.x installation path. Mine was c:/java/jboss-as-7.1.1.Final.

Solution 2

If you open a command shell and type "netstat -a", do you see something LISTENING on the JMX port 1090? If not, perhaps you have to check JBOSS configuration.

https://community.jboss.org/thread/171346?start=0&tstart=0

Solution 3

You can connect directly to the JBOSS JMX instead of the VM one (no need to modify JAVA_OPTS)

Just ensure you have the following config in standalone.xml (JMX subsystem active)

in standalone mode (listened port 9999):

<subsystem xmlns="urn:jboss:domain:jmx:1.1">  
  <show-model value="true"/>  
  <remoting-connector />  
</subsystem> 

in domain mode (listened port 4447)

<subsystem xmlns="urn:jboss:domain:jmx:1.1">  
  <show-model value="true"/>  
  <remoting-connector use-management-endpoint="false"/>  
</subsystem>

Then we need a little hack : As JBoss JMX implementation is a bit specific we need to include some jboss lib to the classpath of JVisualVM

  • Get the file $JBOSS_HOME/bin/jconsole.sh/jconsole.bat and copy / rename it to jvisualvm.sh / jvisualvm.bat in the same directory.

  • Then replace the executable call to jconsole per jvisualvm using -cp:a "$CLASSPATH"instead of -J-Djava.class.path="$CLASSPATH"

Now just launch visualVM using the script and add a new JMX connection (file menu) using the folowing url service:jmx:remoting-jmx://hostname:port (the credentials are the one of management realm)

NB: think to ssh tunnel if you don't have direct access to JMX port

Solution 4

  1. Add the JVM opts to run.conf (run.conf.bat) JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.port=9999 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote"

  2. In Visual VM console open a remote host. And Add JMX Connection and give port number as <9999>

Share:
15,644
Ernestas Kardzys
Author by

Ernestas Kardzys

A versatile Java Engineer with over 7 years’ experience in Software Development and a passion for Agile Development and TDD.

Updated on September 06, 2022

Comments

  • Ernestas Kardzys
    Ernestas Kardzys over 1 year

    I have remote JBoss 7.1 server and I would like to connect to this server by using VisualVM or JConsole.

    I googled a bit and found several threads/tutorials on how to connect to JBoss 7.1 by using VisualVM or JCoonsole, e.g.:

    Unfortunately I had no luck in connecting to my JBoss 7.1 over JMX.

    Do you have any ideas how to connect to JBoss 7.1 with VisualVM?

    EDIT: I added -Dcom.sun.management.jmxremote.port=1090 -Dcom.sun.management.jmxremote.authenticate=false to standalone.conf.bat, but I got an exception: Caused by: java.lang.IllegalStateException: The LogManager was not properly inst alled (you must set the "java.util.logging.manager" system property to "org.jboss.logmanager.LogManager").

    So, I added another option to JAVA_OPTS: -Dcom.sun.management.jmxremote.port=1090 -Dcom.sun.management.jmxremote.authenticate=false -Djava.util.logging.manager=org.jboss.logmanager.LogManager but the exception I receive is this:

    Could not load Logmanager "org.jboss.logmanager.LogManager"
    java.lang.ClassNotFoundException: org.jboss.logmanager.LogManager
            at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
            at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
            at java.security.AccessController.doPrivileged(Native Method)
            at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:423)
            at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
            at java.lang.ClassLoader.loadClass(ClassLoader.java:356)
    
    • zerologiko
      zerologiko over 10 years
      What exception do you get?
    • Ernestas Kardzys
      Ernestas Kardzys over 10 years
      I tried adding -Dcom.sun.management.jmxremote.port=1090 -Dcom.sun.management.jmxremote.authenticate=false to standalone.conf.bat (I use JBoss 7 on Windows) and I got: Caused by: java.lang.IllegalStateException: The LogManager was not properly installed (you must set the "java.util.logging.manager" system property to "org.jboss.logmanager.LogManager")
  • Ernestas Kardzys
    Ernestas Kardzys over 10 years
    Thanks, you're right. I have no applications listening on 1090. So, this must be the problem...
  • Marquez
    Marquez over 7 years
    After hours of battling and trying every suggestion out there this was the only one that worked for me. Thanks! Folks: JBoss includes JVisualVM in the bin folder and this answer explains how to use it!
  • Jorge_Freitas
    Jorge_Freitas over 5 years
    Simple, easy, no JAVA_OPTS modification. Brilliant!