Il semble que je n'ai jamais réussi à faire fonctionner cela dans le passé. Actuellement, je sais que cela ne fonctionne pas.
Mais nous démarrons notre processus Java:
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=6002
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.ssl=false
Je peux envoyer un telnet au port, et "quelque chose est là" (c'est-à-dire que si je ne lance pas le processus, rien ne répond, mais si je le fais, c'est le cas), mais je ne peux pas faire fonctionner JConsole en remplissant l'adresse IP et port.
On dirait que ça devrait être si simple, mais pas d'erreurs, pas de bruit, pas de rien. Ça ne marche pas.
Quelqu'un connaît-il le truc chaud pour ça?
Réponses:
J'ai une solution pour cela:
Si votre processus Java s'exécute sous Linux derrière un pare - feu et que vous souhaitez démarrer JConsole / Java VisualVM / Java Mission Control sur Windows sur votre machine locale pour le connecter au port JMX de votre processus Java .
Vous devez accéder à votre machine Linux via une connexion SSH. Toutes les communications seront acheminées via la connexion SSH.
CONSEIL: cette solution fonctionne, qu'il y ait un pare-feu ou non.
Inconvénient: chaque fois que vous redémarrez votre processus java, vous devrez recommencer toutes les étapes de 4 à 9.
1. Vous avez besoin de la suite de mastic pour votre machine Windows à partir d'ici:
2. Définissez un port libre sur votre machine Linux:
Exemple:
3. Ajoutez des arguments au processus java sur la machine Linux
Cela doit être fait exactement comme ça. Si c'est fait comme ci-dessous, cela fonctionne pour les machines Linux derrière des pare-feu (cela fonctionne à cause de l'
-Djava.rmi.server.hostname=localhost
argument).Exemple:
4. Obtenez le Process-Id de votre processus Java
Exemple:
5. Trouver un port arbitraire pour le téléchargement des stubs RMIServer
Le processus java ouvre un nouveau port TCP sur la machine Linux, où les stubs du serveur RMI seront disponibles au téléchargement. Ce port doit également être disponible via SSH Tunnel pour obtenir une connexion à la machine virtuelle Java.
Avec
netstat -lp
ce port, vous pouvez également trouver deslsof -i
indications sur le port ouvert depuis le processus java.REMARQUE: ce port change toujours lorsque le processus java est démarré.
Exemple:
6. Activez deux tunnels SSH à partir de votre machine Windows avec du mastic
Exemple:
7. Connectez-vous à votre machine Linux avec Putty avec ce tunnel SSH activé.
Laissez la session de mastic ouverte.
Lorsque vous êtes connecté, Putty tunnelise toutes les connexions TCP vers la machine Linux via le port SSH 22.
Port JMX:
RMIServer-Stub-Port:
8. Démarrez JConsole / Java VisualVM / Java Mission Control pour vous connecter à votre processus Java à l'aide de l'URL suivante
Cela fonctionne, car JConsole / Java VisualVM / Java Mission Control pense que vous vous connectez à un port sur votre machine Windows locale. mais Putty envoie toute la charge utile au port 15666 de votre machine Linux.
Sur la machine Linux, le processus java donne d'abord la réponse et renvoie le port RMIServer. Dans cet exemple 37123.
Ensuite, JConsole / Java VisualVM / Java Mission Control pense qu'il se connecte à localhost: 37123 et putty enverra la totalité de la charge utile à la machine Linux
Le processus java répond et la connexion est ouverte.
Exemple:
9. ENJOY # 8-]
la source
L'ajout a
-Djava.rmi.server.hostname='<host ip>'
résolu ce problème pour moi.la source
Essayé avec Java 8 et les versions plus récentes
Cette solution fonctionne bien également avec les pare-feu
1. Ajoutez ceci à votre script de démarrage java sur l'hôte distant:
2. Exécutez ceci sur votre ordinateur.
Utilisateurs Windows :
putty.exe -ssh user@remote-host -L 1616:remote-host:1616
Utilisateurs Linux et Mac :
ssh user@remote-host -L 1616:remote-host:1616
3. Démarrez
jconsole
sur votre ordinateur4. Amusez-vous bien!
PS: à l'étape 2, à l'aide de
ssh
et-L
vous spécifiez que le port 1616 de l'hôte local (client) doit être redirigé vers le côté distant. Il s'agit d'un tunnel ssh et permet d'éviter les pare-feu ou divers problèmes de réseau.la source
Vous rencontrez probablement un problème avec un pare-feu. Le «problème» est que le port que vous spécifiez n'est pas le seul port utilisé, il utilise 1 ou peut-être même 2 ports supplémentaires pour RMI, et ceux-ci sont probablement bloqués par un pare-feu.
L'un des ports supplémentaires ne sera pas connu à l'avance si vous utilisez la configuration RMI par défaut, vous devez donc ouvrir une large gamme de ports - ce qui pourrait ne pas amuser l'administrateur du serveur.
Il existe une solution qui ne nécessite pas d'ouvrir beaucoup de ports, cependant, je l'ai fait fonctionner en utilisant les extraits de code source combinés et les conseils de
http://forums.sun.com/thread.jspa?threadID=5267091- le lien ne fonctionne plushttp://blogs.oracle.com/jmxetc/entry/connecting_through_firewall_using_jmx
http://java.sun.com/javase/6/docs/technotes/guides/management/agent.html
Il est même possible de configurer un tunnel ssh et de le faire fonctionner :-)
la source
forums.sun.com
est rompublogs.oracle.com
est rompu.Après avoir testé mon Google-fu ces derniers jours, j'ai finalement pu le faire fonctionner après avoir compilé les réponses de Stack Overflow et de cette page http://help.boomi.com/atomsphere/GUID-F787998C- 53C8-4662-AA06-8B1D32F9D55B.html .
Republication à partir de la page Dell Boomi:
La seule ligne pour laquelle je n'ai vu aucune couverture de réponse Stack Overflow est
Dans mon cas, j'essayais de récupérer les métriques Kakfa, j'ai donc simplement changé l'option ci-dessus pour qu'elle corresponde à la
-Dcom.sun.management.jmxremote.port
valeur. Donc, sans authentification d'aucune sorte, la configuration minimale devrait ressembler à ceci:la source
Utilisez-vous Linux? Peut-être que l'agent de gestion est lié à localhost:
http://java.sun.com/j2se/1.5.0/docs/guide/management/faq.html#linux1
la source
Les étapes 4 à 7 de Sushicutta peuvent être ignorées en ajoutant la ligne suivante à l'étape 3:
par exemple Ajouter aux paramètres de démarrage:
Pour la redirection de port, connectez-vous en utilisant:
si votre hôte est un tremplin, enchaînez simplement le port en avant en exécutant ce qui suit sur la pierre de marche après ce qui précède:
N'oubliez pas que hostname = localhost est nécessaire pour s'assurer que jmxremote indique à la connexion rmi d'utiliser le tunnel. Sinon, il pourrait essayer de se connecter directement et toucher le pare-feu.
la source
ssh -L <JMX_port>:localhost:<JMX_port> <remote_user>@<remote_host>
) Puis je l' exécute sur une machine locale (3) Puis je me connecte à JMX distant en utilisant:jconsole <remote_host>:<JMX_port>
PROTIP:
Le port RMI est ouvert sur des portnr arbitraires. Si vous avez un pare-feu et que vous ne voulez pas ouvrir les ports 1024-65535 (ou utiliser vpn), vous devez faire ce qui suit.
Vous devez corriger (comme si vous aviez un numéro connu) les ports du registre RMI et du serveur JMX / RMI. Vous faites cela en mettant un fichier jar (catalina-jmx-remote.jar c'est dans les extra) dans le lib-dir et en configurant un écouteur spécial sous le serveur:
(Et bien sûr les drapeaux habituels pour activer JMX
Voir: JMX Remote Lifecycle Listener à l' adresse http://tomcat.apache.org/tomcat-6.0-doc/config/listeners.html
Ensuite, vous pouvez vous connecter en utilisant cette URL horrible:
la source
Vérifiez si votre serveur est derrière le pare-feu. JMX est basé sur RMI, qui ouvre deux ports au démarrage. L'un est le port de registre, la valeur par défaut est 1099 et peut être spécifié par l'
com.sun.management.jmxremote.port
option. L'autre est pour la communication de données, et est aléatoire, ce qui cause le problème. Une bonne nouvelle est que, à partir de JDK6, ce port aléatoire peut être spécifié par l'com.sun.management.jmxremote.rmi.port
option.la source
Faire passer JMX à travers le pare-feu est vraiment difficile. Le problème est que RMI standard utilise un deuxième port assigné au hasard (à côté du registre RMI).
Nous avons trois solutions qui fonctionnent, mais chaque cas en nécessite une différente:
JMX sur SSH Tunnel avec proxy Socks, utilise RMI standard avec SSH Magic http://simplygenius.com/2010/08/jconsole-via-socks-ssh-tunnel.html
JMX MP (alternative à RMI standard), utilise un seul port fixe, mais nécessite un fichier jar spécial sur le serveur et le client http://meteatamel.wordpress.com/2012/02/13/jmx-rmi-vs-jmxmp/
Démarrez le code du formulaire JMX Server, là il est possible d'utiliser RMI standard et d'utiliser un deuxième port fixe: https://issues.apache.org/bugzilla/show_bug.cgi?id=39055
la source
Lors du test / débogage / diagnostic des problèmes JMX distants , essayez d'abord de toujours vous connecter sur le même hôte qui contient le MBeanServer (c'est-à-dire localhost), pour écarter les problèmes de réseau et autres problèmes spécifiques non-JMX.
la source
Il y a déjà de bonnes réponses ici, mais il existe une approche un peu plus simple que je pense qu'il vaut la peine de partager.
L'approche de sushicutta est bonne, mais elle est très manuelle car vous devez obtenir le port RMI à chaque fois. Heureusement, nous pouvons contourner cela en utilisant un proxy SOCKS plutôt qu'en ouvrant explicitement les tunnels de port. L'inconvénient de cette approche est que l'application JMX que vous exécutez sur votre ordinateur doit pouvoir être configurée pour utiliser un proxy. La plupart des processus vous permettent de le faire en ajoutant des propriétés Java, mais certaines applications ne le prennent pas en charge.
Pas:
Ajoutez les options JMX au script de démarrage de votre service Java distant:
Configurez une connexion proxy SOCKS à votre machine distante:
Configurez votre application de surveillance Java locale pour utiliser le proxy SOCKS (localhost: 9696). Remarque: vous pouvez parfois le faire à partir de la ligne de commande, c'est-à-dire:
la source
Ce qui suit a fonctionné pour moi (même si je pense que le port 2101 n'a pas vraiment contribué à cela):
Je me connecte à partir d'une machine distante à un serveur sur lequel Docker est en cours d'exécution et le processus se trouve à l'intérieur du conteneur. De plus, j'ai arrêté firewallD mais je ne pense pas que ce soit le problème car je pouvais telnet à 2100 même avec le pare-feu ouvert. J'espère que ça aide.
la source
J'exécute JConsole / JVisualVm sur Windows accroché à tomcat exécutant Linux Redhat ES3.
La désactivation du filtrage des paquets à l'aide de la commande suivante a fait l'affaire pour moi:
où jconsole-host est soit le nom d'hôte, soit l'adresse d'hôte sur laquelle JConsole s'exécute et jmxremote-port est le numéro de port défini pour com.sun.management.jmxremote.port pour la gestion à distance.
la source
J'utilise boot2docker pour exécuter des conteneurs docker avec Tomcat à l'intérieur et j'ai le même problème, la solution était de:
-Djava.rmi.server.hostname=192.168.59.103
docker run ... -p 9999:9999 ...
. L'utilisation de différents ports ne fonctionne pas.la source
Vous devez également vous assurer que le nom de votre machine correspond à l'adresse IP à laquelle JMX est lié; PAS localhost ni 127.0.0.1. Pour moi, cela a aidé à mettre une entrée dans les hôtes qui définit explicitement cela.
la source
Faire passer JMX à travers le pare-feu n'est pas du tout difficile. Il y a une petite capture. Vous devez rediriger à la fois votre port configuré JMX ie. 9010 et l'un des ports dynamiques qu'il écoute sur ma machine était> 30000
la source
Voici les étapes qui ont fonctionné pour moi (debian derrière le pare-feu côté serveur, accessible via VPN depuis mon Mac local):
vérifier l'IP du serveur
utiliser les paramètres JVM:
exécuter l'application
trouver le pid du processus java en cours d'exécution
vérifier tous les ports utilisés par JMX / RMI
ouvrez tous les ports de l'étape 5 sur le pare-feu
Voila.
la source
Afin d'apporter une contribution, c'est ce que j'ai fait sur CentOS 6.4 pour Tomcat 6.
Arrêter le service iptables
Ajoutez la ligne suivante à tomcat6.conf
De cette façon, j'ai pu me connecter à partir d'un autre PC en utilisant JConsole.
la source
J'essaie de JMC d'exécuter l'enregistreur de vol (JFR) pour profiler NiFi sur un serveur distant qui n'offre pas d'environnement graphique sur lequel exécuter JMC.
Sur la base des autres réponses données ici, et après de nombreux essais et erreurs, voici ce que je fournis à la JVM ( conf / bootstrap.conf ) lorsque je lance NiFi:
J'ai mis ceci dans / etc / hosts , même si je doute que ce soit nécessaire:
Ensuite, au lancement de JMC, je crée une connexion à distance avec ces propriétés:
Incidemment, si je clique sur l'URL du service JMX personnalisé, je vois:
Cela l'a finalement fait pour moi.
la source