J'essaie de me connecter à une instance Tomcat JMX distante à l'aide de jConsole. Mais ne peut pas se connecter avec succès. Une idée?
J'ai inclus l'option suivante dans Tomcat catalina.sh
distant:
Java_OPTS="$Java_OPTS -Dcom.Sun.management.jmxremote \
-Dcom.Sun.management.jmxremote.port=9004 \
-Dcom.Sun.management.jmxremote.ssl=false \
-Dcom.Sun.management.jmxremote.authenticate=false"
J'ai eu un problème similaire, si ce n'est le même problème. Je pourrais me connecter au serveur JMX si je démarrais jconsole localement sur la machine.
Il semble que le serveur RMI n'écoutait pas sur la bonne adresse IP. Ainsi, comme suggéré dans cette question connexe , j'ai ajouté ce qui suit:
-Djava.rmi.server.hostname=<Host ip>
à Java_OPTS
également, puis cela a fonctionné.
J'ai collecté des informations réparties sur le réseau, avec des indications d'autres membres.
La plupart des problèmes causés par JMX sont (imo) le fait que JMX ouvre un deuxième port réseau alloué dynamiquement. Un pare-feu (comme iptables) bloquera cela.
Solution pour Tomcat sur linux:
utilisez Tomcat 6.0.24 ou une version plus récentedownload catalina-jmx-remote.jar à partir des suppléments Apache Tomcat (utilisez parcourir sur la page de téléchargement de Tomcat) copiez-le dans $ CTALINA_HOME\lib
Cela vous permet de définir les deux ports utilisés par JMX.
modifier la section Serveur dans votre serveur.xml
<Server port="8005" ..>
...
<Listener className="org.Apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="9840" rmiServerPortPlatform="9841"/>
définir des variables d'environnement (par exemple, dans setenv.sh)
CATALINA_OPTS="
-Djava.rmi.server.hostname=IP-TO-LISTEN
-Dcom.Sun.management.jmxremote.password.file=$CATALINA_BASE/conf/jmxremote.password
-Dcom.Sun.management.jmxremote.access.file=$CATALINA_BASE/conf/jmxremote.access
-Dcom.Sun.management.jmxremote.ssl=false"
cela active le contrôle d'accès pour JMX
jmxremote.access ressemblera à
monitorRole readonly
controlRole readwrite
end jmxremote.password sera
monitorRole Tomcat
controlRole Tomcat
(juste des espaces simples)
redémarrez Tomcat.
Maintenant, configurez le pare-feu sur le serveur (par exemple, iptables)
/ etc/sysconfig/iptables
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9840 -j ACCEPT
-A RH-Firewall-1-INPUT -m state --state NEW -m tcp -p tcp --dport 9841 -j ACCEPT
et/etc/sysconfig/ip6tables
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 9840 -j ACCEPT
-A RH-Firewall-1-INPUT -m tcp -p tcp --dport 9841 -j ACCEPT
redémarrer iptables
Terminé!
Utilisez maintenant VisualVM ou JConsole sur votre poste de travail pour établir une connexion à rmiRegistryPortPlatform, 9840 de notre exemple.
S'il n'y a plus de pare-feu entre le poste de travail et le serveur, cela devrait fonctionner.
-Dcom.Sun.management.jmxremote.port=1616
-Dcom.Sun.management.jmxremote.rmi.port=1616
-Dcom.Sun.management.jmxremote.ssl=false
-Dcom.Sun.management.jmxremote.authenticate=false
-Dcom.Sun.management.jmxremote.local.only=false
-Djava.rmi.server.hostname=localhost
par exemple ajouter dans bin/setenv.sh ceci:
export CATALINA_OPTS="$CATALINA_OPTS \
-Dcom.Sun.management.jmxremote.port=1616 \
-Dcom.Sun.management.jmxremote.rmi.port=1616 \
-Dcom.Sun.management.jmxremote.local.only=true \
-Dcom.Sun.management.jmxremote.authenticate=false \
-Dcom.Sun.management.jmxremote.ssl=false "
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
jconsole
sur votre ordinateurjconsole localhost:1616
ssh
et -L
, vous indiquez que le port 1616 sur l'hôte local (client) doit être transféré au côté distant.quelle chaîne utilisez-vous comme URL de connexion JMX? Je ne veux pas souligner l'évidence, mais JConsole a une interface terrible et nécessite pour moi une URL trop complexe avant de pouvoir se connecter à une application jmx distante. Le mien ressemble à ceci:
service:jmx:rmi:///jndi/rmi://(hostname):(jmxport)/jmxrmi
1/Téléchargez le catalina-jmx-remote.jar
à partir du site Web Apache et placez-le dans $CATALINA_HOME/lib
.
2/Effectuez une sauvegarde server.xml
/setenv.sh
. Apportez les modifications à server.xml
comme ci-dessous -
<Listener className="org.Apache.catalina.mbeans.JmxRemoteLifecycleListener" rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" />
3/Apportez les modifications à $CATALINA_BASE/bin/setenv.sh
comme -
[...]
JVM_OPTS="[...]
-Dcom.Sun.management.jmxremote
-Dcom.Sun.management.jmxremote.authenticate=true
-Djava.rmi.server.hostname=<eth:0_IP>| <`hostname -i`>
-Dcom.Sun.management.jmxremote.password.file=/apps/data/Apache-Tomcat-8_8080/conf/jmxremote.password
-Dcom.Sun.management.jmxremote.access.file=/apps/data/Apache-Tomcat-8_8080/conf/jmxremote.access
-Dcom.Sun.management.jmxremote.ssl=false
-Dcom.Sun.management.jmxremote.local.only=false
-Dcom.Sun.management.jmxremote=true "
4/Créez ces deux fichiers en tant que - $touch $CATALINA_BASE/conf/jmxremote.password
contenant:
admin letmein
$touch $CATALINA_BASE/conf/jmxremote.access
contenant:
admin readwrite
$ chmod 600 jmxremote.password
5/Redémarrez Tomcat et testez sur jconsole tool :)
$echo|telnet 10.105.14.90 10001
Que voulez-vous dire exactement lorsque vous dites "Mais ne pouvez pas vous connecter avec succès"? Y a-t-il un message d'erreur? Essayez de vous connecter à jconsole et voyez si cela vous aide à le déboguer.
Pour activer la journalisation de jconsole, éditez un fichier nommé logging.properties dans le répertoire dans lequel vous allez exécuter jconsole, ajoutez:
handlers= Java.util.logging.ConsoleHandler
.level=INFO
Java.util.logging.FileHandler.pattern = %h/Java%u.log
Java.util.logging.FileHandler.limit = 50000
Java.util.logging.FileHandler.count = 1
Java.util.logging.FileHandler.formatter = Java.util.logging.XMLFormatter
Java.util.logging.ConsoleHandler.level = FINEST
Java.util.logging.ConsoleHandler.formatter = Java.util.logging.SimpleFormatter
javax.management.level=FINEST
javax.management.remote.level=FINEST
Ensuite, lancez jconsole avec:
jconsole -J-Djava.util.logging.config.file=logging.properties
si vous travaillez sur linux, modifiez le fichier catalina.sh en ajoutant:
CATALINA_OPTS="-Dcom.Sun.management.jmxremote -Djava.rmi.server.hostname=<Host_IP> -Dcom.Sun.management.jmxremote.port=<Host_PORT> -Dcom.Sun.management.jmxremote.ssl=false -Dcom.Sun.management.jmxremote.authenticate=false"
export CATALINA_OPTS
ou modifiez le fichier/etc/profile en tant que root et réexécutez le fichier (source/etc/profile)
si vous travaillez sur Windows et que vous démarrez Tomcat à partir de la ligne de commande, utilisez la variable d'environnement CATALINA_OPTS
si vous travaillez sur Windows et que vous démarrez Tomcat en tant que service, vous devez utiliser l'utilitaire de service de surveillance pour configurer les paramètres d'initialisation de service (ni setenv.bat, catalina.bat ni env-vars ne fonctionneront). pour cela, vous aurez besoin du nom de service qui apparaît dans la liste services.msc (par exemple, jasperreportsTomcat). Après, vous devrez ouvrir une console en tant qu'administrateur et exécuter (par exemple): Tomcat6w.exe // MS // jasperreportsTomcat
avec cette commande apparaîtra une icône de la barre où vous pouvez ouvrir un panneau. Dans l'onglet "Java", vous pouvez maintenant modifier les options de jmx. Veillez à ne pas ajouter d'espaces blancs de fin et utilisez le symbole "[entrer]" pour séparer chaque option, ligne par ligne.
-Dcom.Sun.management.jmxremote
-Djava.rmi.server.hostname=192.168.61.101
-Dcom.Sun.management.jmxremote.port=9999
-Dcom.Sun.management.jmxremote.ssl=false
-Dcom.Sun.management.jmxremote.authenticate=false
J'espère que ça aide
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 du registre, la valeur par défaut est 1099 et peut être spécifié par l'option com.Sun.management.jmxremote.port. L'autre est pour la communication de données, et est aléatoire, ce qui pose problème. Une bonne nouvelle est que, à partir de JDK6, ce port aléatoire peut être spécifié par l'option com.Sun.management.jmxremote.rmi.port.
ajoutez la ligne dans votre {rép_tomcat} /bin/setenv.sh:
export CATALINA_OPTS="-Dcom.Sun.management.jmxremote -Dcom.Sun.management.jmxremote.port=8991 -Dcom.Sun.management.jmxremote.rmi.port=8991 -Dcom.Sun.management.jmxremote.authenticate=false -Dcom.Sun.management.jmxremote.ssl=false"
J'ai quelque chose pour vous tous, afin de compléter l'enquête de cette affaire. Il existe un truc: il arrive que l’outil de profilage se connecte au jvm en utilisant un port, mais le jvm continue la conversation en utilisant un autre port aléatoire. Si jvm est exécuté sur une machine distante (par exemple: un serveur d'applications Web Tomcat) et que la machine distante dispose d'une protection contre les connexions entrantes et sortantes, vous devez définir la propriété système Java com.Sun.management.jmxremote.rmi.port
sur la même valeur que la propriété nommée com.Sun.management.jmxremote.port
.
Source: https://serverfault.com/questions/308662/how-do-i-fix-a-failed-to-retrieve-rmiserver-stub-jmx-error Et vérifiez également ceci: http://blog.cantremember.com/debugging-with-jconsole-jmx-ssh-tunnels/
J'espère pouvoir contribuer les gars!
Et bonne chance!
Eh bien, j'ai eu ce problème dans une machine Linux (machine virtuelle) et je l'ai corrigé à l'aide de la propriété -Djava.rmi.server.hostname, mais il y a une chose que je ne comprends pas. Ma machine a 5 serveurs Tomcat, jmx étant tous activés dans des ports consécutifs (8008,8018,8028 ...) et un seul d'entre eux a eu ce problème de connexion à JMX. Aucun pare-feu, aucune propriété -Djava.rmi.server.hostname dans aucun Tomcat ....
Donc, le problème, c'est que je comprends le problème mais je ne comprends pas pourquoi 4 de mes chats ont fonctionné et 1 pas.
P.D: Mon anglais est très pauvre, je sais. Mes excuses.
Changer le /etc/hosts
sur linux, où je remplaçais l'adresse de l'hôte local associé à mon compte par l'adresse IP de la machine, résolut ce problème pour moi.
PROTIP: 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 plaçant jar-file dans le répertoire lib et en configurant un écouteur spécial. (Et bien sûr les drapeaux habituels pour activer JMX
-Dcom.Sun.management.jmxremote \
-Dcom.Sun.management.jmxremote.port=8999 \
-Dcom.Sun.management.jmxremote.ssl=false \
-Dcom.Sun.management.jmxremote.authenticate=false \
-Djava.rmi.server.hostname=<HOSTNAME> \
Voir: JMX Remote Lifecycle Listener à http://Tomcat.Apache.org/Tomcat-6.0-doc/config/listeners.html