web-dev-qa-db-fra.com

Surveillance à distance avec visualvm et JMX

Je souhaite surveiller une application Java (Spring Boot) à distance exécutée à distance avec jvisualvm (ou jconsole). Lors d'une exécution locale, je peux voir les beans gérés dans jvisualvm et jconsole. Lors de l'exécution à distance, je ne peut pas se connecter. Je l'ai essayé avec plusieurs processus Java (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 Java).

$ bin/xd/xd-singlenode

Le processus serveur semble reprendre 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 à distance comme suit (essayé à la fois avec une connexion SSL et sans):

enter image description here

Voici le message d'erreur que jvisualvm me donne:

Error Message given by 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 - cela ne semble donc pas être un problème de pare-feu.

Toute aide est grandement appréciée.

17
user152468

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 la Jconsole, utilisez ce qui suit pour vous connecter:

service:jmx:rmi:///jndi/rmi://192.168.59.99:9010/jmxrmi
26
Arnab Biswas