J'exécute une Java sur Java 6 VM sur un ordinateur Windows XP distant, sur lequel je peux exécuter jvisualvm. exe pour se connecter à l’application en cours automatiquement.
Maintenant, je dois connecter cette application à partir de mon ordinateur local, mais je ne connais pas le numéro de port JMX de l'ordinateur distant. Où puis-je le trouver? Ou dois-je redémarrer cette application avec certains VM paramètres pour spécifier le numéro de port?
Après avoir lu la question Comment trouver le port JMX sur un serveur , j'ai exécuté la commande sur l'ordinateur distant
netstat -apn
mais rien obtenu.
Maintenant, je dois connecter cette application à partir de mon ordinateur local, mais je ne connais pas le numéro de port JMX de l'ordinateur distant. Où puis-je le trouver? Ou dois-je redémarrer cette application avec certains VM paramètres pour spécifier le numéro de port?
Par défaut, JMX ne publie sur un port que si vous spécifiez les arguments à partir de cette page: Comment activer JMX ...
-Dcom.Sun.management.jmxremote
-Dcom.Sun.management.jmxremote.port=9010
-Dcom.Sun.management.jmxremote.local.only=false
-Dcom.Sun.management.jmxremote.authenticate=false
Si vous exécutez, vous devriez pouvoir accéder à n’importe laquelle de ces propriétés système pour voir si elles ont été définies:
if (System.getProperty("com.Sun.management.jmxremote") == null) {
System.out.println("JMX remote is disabled");
} else [
String portString = System.getProperty("com.Sun.management.jmxremote.port");
if (portString != null) {
System.out.println("JMX running on port "
+ Integer.parseInt(portString));
}
}
Selon le mode de connexion du serveur, vous devrez peut-être également spécifier le paramètre suivant. Dans le cadre de la connexion JMX initiale, jconsole se connecte au port RMI pour déterminer le port sur lequel le serveur JMX est exécuté. Lorsque vous démarrez une application compatible JMX pour la première fois, celle-ci recherche son propre nom d'hôte pour déterminer l'adresse à renvoyer dans cette transaction RMI initiale. Si votre nom d'hôte n'est pas dans /etc/hosts
ou s'il est défini sur une adresse d'interface incorrecte, vous pouvez la remplacer par ce qui suit:
-Djava.rmi.server.hostname=<IP address>
En passant, mon package SimpleJMX vous permet de définir à la fois le serveur JMX et le port RMI ou de les définir sur le même port. Le port ci-dessus défini avec com.Sun.management.jmxremote.port
est en fait le port RMI. Cela indique au client sur quel port le serveur JMX s'exécute.