Surveillance à distance avec visualvm et JMX


Je voudrais surveiller une application java (spring boot) en cours d'exécution à distance avec jvisualvm (ou jconsole). Lors de l'exécution locale, je peux voir les beans gérés dans jvisualvm et jconsole. Lors de l'exécution à distance, je ne peux pas me connecter. Je l'ai essayé avec plusieurs processus java différents (par exemple avec spring xd). La recherche de réponses ici sur SO et sur Google n'a pas aidé.

Ce sont mes JAVA_OPTS (sur l'hôte distant):

$ echo $JAVA_OPTS
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.59.99

Ensuite, je démarre simplement le programme comme suit (c'est pour spring xd, mais je rencontre le même problème avec d'autres programmes java).

$ bin/xd/xd-singlenode

Le processus serveur semble prendre les options:

$ ps -ef | grep single
vagrant  22938 19917 99 06:38 pts/2    00:00:03 /usr/lib/jvm/java-8- oracle/jre/bin/java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.local.only=false -Dcom.sun.management.jmxremote.authenticate=false -Djava.rmi.server.hostname=192.168.59.99 -Dspring.application.name=admin -Dlogging.config=file:/home/vagrant/spring-xd-1.1.0.RELEASE/xd/config///xd-singlenode-logger.properties -Dxd.home=/home/vagrant/spring-xd-1.1.0.RELEASE/xd -Dspring.config.location=file:/home/vagrant/spring-xd-1.1.0.RELEASE/xd/config// -Dxd.config.home=file:/home/vagrant/spring-xd-1.1.0.RELEASE/xd/config// -Dspring.config.name=servers,application -Dxd.module.config.location=file:/home/vagrant/spring-xd-1.1.0.RELEASE/xd/config//modules/ -Dxd.module.config.name=modules -classpath (...)

La version java sur l'hôte distant (ubuntu linux vm) est:

$ java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b14)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)

La version java sur la machine locale (Mac OS) est légèrement différente:

$ java -version    
java version "1.8.0_40"
Java(TM) SE Runtime Environment (build 1.8.0_40-b25)
Java HotSpot(TM) 64-Bit Server VM (build 25.40-b25, mixed mode)

Dans jvisualvm, j'ajoute la connexion distante comme suit (essayé à la fois avec une connexion ssl et sans):

entrez la description de l'image ici

C'est le message d'erreur que jvisualvm donne moi:

Message d'erreur donné par jvisualvm

Je peux me connecter de l'hôte local à l'hôte distant avec la commande telnet 192.168.59.99:9010, lorsque le processus distant est en cours d'exécution so donc cela ne semble pas être un problème de pare-feu.

Toute aide est très appréciée.

Author: user152468, 2015-05-06

1 answers

Veuillez utiliser les options JVM suivantes:

-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9010 -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Djava.rmi.server.hostname=192.168.59.99

Dans le Jconsole, utilisez ce qui suit pour vous connecter:

service:jmx:rmi:///jndi/rmi://192.168.59.99:9010/jmxrmi
 20
Author: Arnab Biswas, 2015-05-06 07:21:57