Comment activer JMX sur mon JVM pour l'accès avec jconsole?
Comment activer JMX sur une JVM pour l'accès avec jconsole?
- il est allowd, et en fait il n'est qu'un rappel pour moi, parce que j'oublie toujours où copier les paramètres et maintenant, je sais où je trouve 🙂
- Pile Exchange a toujours explicitement encouragé les utilisateurs à répondre à leurs propres questions, voir ici: stackoverflow.com/help/self-answer
- Plus d'une fois j'ai cherché SI pour quelque chose et trouvé une réponse à votre question... par moi-même. Et un de ceux qui a été demandé par moi-même. C'est pourquoi il est bon de mettre vos propres réponses. Aussi, pensez à toutes les autres personnes qui peuvent avoir rencontré votre problème, si vous répondez à votre question, vous aider trop.
- Mise à jour de la doc de Java 8 est ici
- Pouvez-vous fournir une référence à votre question fermée vous avez répondu vous-même? Il pourrait être intéressant de discuter sur Meta.
- Je suis désolé. Cela a été il ya longtemps et je ne suis plus en mesure de vous fournir le lien et le contenu.
- La Question devrait mentionner que vous pouvez avoir exactement le même problème lorsque jvisualvm vous dit "Echec de la création de JMX de connexion à l'application cible" lorsque vous essayez de démarrer CPU d'échantillonnage.
Vous devez vous connecter pour publier un commentaire.
Les documents pertinents peuvent être trouvés ici:
http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html
Commencer votre programme avec les paramètres suivants:
Par exemple comme ceci:
-Dcom.sun.management.jmxremote.local.only=false
n'est pas forcément nécessairemais sans cela, il ne fonctionne pas sur Ubuntu. L'erreur serait quelque chose comme
ce:
voir http://bugs.sun.com/bugdatabase/view_bug.do?bug_id=6754672
Également être prudent avec
-Dcom.sun.management.jmxremote.authenticate=false
quirend l'accès à la disposition de tous, mais si vous utilisez uniquement pour le suivi de la JVM sur
votre machine locale, il n'a pas d'importance.
Mise à jour:
Dans certains cas, je n'ai pas été en mesure de joindre le serveur. Ce fut alors fixé si j'ai mis ce paramètre ainsi:
-Djava.rmi.server.hostname=127.0.0.1
com.sun.management.jmxremote
a la valeur par défaut commetrue
. (Merci de Soleil!) Pour être très clair, surtout pour ceux qui sont moins familiers avec JMX nobs, j'utilise:com.sun.management.jmxremote=true
Réf: docs.oracle.com/javase/8/docs/technotes/guides/management/...Dcom.sun.management.jmxremote.rmi.port=9011
et ouvert dans le pare - feu, encore cant connect avec le pare-feu en cours de up. Toutes les pensées? Ai-je raté quelque chose?-Djava.rmi.server.hostname=[...]
devrait fonctionner. Sans ces deux, j'ai couru dans des problèmes similaires, alors assurez-vous que votre port configuré pour.rmi.port
est vraiment accessible par vos clients ET de même pour la configuration de la.hostname
! Sans ce dernier explicitement définie, Java assumera certaines IP c'est l'interface principale du serveur, qui pourrait encore être bloqué par votre pare-feu. Sans le port, il suppose une certaine manière aléatoire. Vous pouvez utiliser Wireshark ou le Moniteur de Processus pour déboguer les connexions client/serveur.java.rmi.server.hostname
La valeur de cette propriété représente le nom d'hôte de la chaîne qui devraient être associées à distance avec des talons pour créés localement des objets à distance, afin de permettre aux clients d'appeler des méthodes sur l'objet distant. La valeur par défaut de cette propriété est l'adresse IP de l'hôte local, en "pointillé-quad" format. docs.oracle.com/javase/8/docs/technotes/guides/rmi/...Exécute dans un conteneur Docker introduit toute une série de problèmes supplémentaires pour la connexion donc j'espère que cela aide quelqu'un. J'ai besoin d'ajouter les options suivantes que je vais expliquer ci-dessous:
DOCKER_HOST_IP
Contrairement à l'utilisation de jconsole localement, vous avez à la promotion d'un autre IP que vous verrez probablement à partir de l'intérieur du conteneur. Vous aurez besoin de le remplacer
${DOCKER_HOST_IP}
avec le résoluble IP (Nom DNS) de votre Panneau d'accueil.JMX à Distance & RMI les Ports
Il ressemble JMX nécessite un accès à distance à l'interface de gestion (jstat) que utilise un autre port de transférer certaines données lors de l'arbitrage de la connexion. Je n'ai pas vu nulle part immédiatement évident dans
jconsole
pour définir cette valeur. Dans l'article lié, le processus a été:jconsole
avec l'activation de l'enregistrementjconsole
tenté d'utiliseriptables
/firewall
règles nécessaires pour permettre à ce port pour connecterAlors que ça marche, c'est certainement pas un automatisable solution. J'ai opté pour une mise à niveau à partir de jconsole à VisualVM car il vous permet de spécifier le port sur lequel
jstatd
est en cours d'exécution. Dans VisualVM, ajouter un Nouvel Hôte Distant et de le mettre à jour avec les valeurs qui correspondent à celles indiquées ci-dessus:Puis cliquez-droit sur la nouvelle Télécommande de l'Hôte et de Connexion
Add JMX Connection...
N'oubliez pas de cocher la case pour
Do not require SSL connection
. Espérons-le, qui devrait vous permettre de vous connecter.-Djava.rmi.server.hostname=localhost
-Dcom.sun.management.jmxremote.rmi.port=[...]
est ainsi la clé en cas de creusement de tunnels JMX/RMI à travers SSH. Sans ces, objets distants sont accessibles à l'aide du public/main/... adresse IP du serveur à l'aide de certains de port aléatoire, qui ne peuvent pas être transmis facilement.-Djava.rmi.server.hostname=0.0.0.0
DOCKER_HOST_IP
n'importe où - j'ai simplement utilisélocalhost
et transmis les ports lors de l'exécution du panneau de l'image:-p 9998:9998, -p 9999:9999
etc.Remarque, la version 6 de Java dans l'incarnation la plus récente permet de jconsole de s'attacher à un processus en cours d'exécution, même après qu'il a été commencé sans JMX incantations.
Si ce qui vous est offert, pensez également à jvisualvm car il fournit une mine d'informations sur les processus en cours d'exécution, y compris un générateur de profils.
Je suis aide A ND 7.0
Mon JVM besoin de tous les arguments suivants à surveiller dans la JConsole
Sur Linux, j'ai utilisé le suivant params:
et aussi j'ai édité
/etc/hosts
de sorte que le nom d'hôte décide à l'adresse de l'hôte (192.168.0.x) plutôt que sur l'adresse de bouclage (127.0.0.1)Exécuter votre application java avec la ligne de commande suivante paramètres:
Il est important d'utiliser le -Dcom.soleil.de la gestion.jmxremote.ssl=false paramètre si vous ne voulez pas installer des certificats numériques sur jmx hôte.
Si vous avez commencé votre application sur une machine ayant l'adresse IP de 192.168.0.1, ouvrez jconsole, mettre 192.168.0.1:8855 dans le Processus Distant domaine, et cliquez sur Connecter.
-Dcom.sun.management.jmxremote.ssl=false
? Devraitjconsole
afficher une erreur, ou serait-il juste tranquillement ne parviennent pas à se connecter?avec ci-dessous de la ligne de commande paramètres ,
Parfois dans les serveurs linux , imx connexion à ne pas avoir réussi. c'est parce que , dans le cloud hôte linux, dans /etc/hosts afin que le nom d'hôte résout à l'adresse de l'hôte.
le meilleur moyen pour résoudre ce problème est, ping le particulier serveur linux à partir d'une autre machine en réseau et l'utilisation que l'adresse IP de l'hôte dans le
Mais ne comptez pas sur l'adresse ip que vous obtenez à partir d'un serveur linux à l'aide de la commande ifconfig.moi. l'adresse ip que vous obtenez, il est masqué qui est présent dans le fichier hôte.
J'ai eu exactement ce problème, et créé un projet GitHub pour tester et trouver les bons paramètres.
Il contient une
Dockerfile
avec l'appui des scripts, et un simpledocker-compose.yml
pour des tests rapides.D'abord, vous devez vérifier si votre java processus est déjà en cours d'exécution avec JMX paramètres. Ce faire:
Vérifier votre processus java que vous voulez surveiller. Si vous pouvez voir jmx rmi paramètre Djmx.rmi.de registre.port=xxxx utilisez le port mentionné ici dans votre java visualvm pour se connecter à distance, en vertu de connexion jmx.
Si elle ne s'exécute pas par jmx port rmi alors vous avez besoin pour exécuter vos processus java avec les paramètres mentionnés ci-dessous :
Remarque: les numéros de port sont en fonction de votre choix.
Maintenant, vous pouvez utiliser ce port jmx coneection. Ici c'est le port
1234
.sudo lsof -i:1234
n'indique rien pour moi