129 votes

Quelqu'un a eu une distance de JMX JConsole à travailler?

Il semble que je n'ai jamais eu que cela fonctionne dans le passé. Actuellement, je SAIS que ça ne fonctionne pas.

Mais nous commençons 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 en telnet sur le port, et "quelque chose est là" (qui est, si je ne démarrez pas le processus, rien de réponses, mais si je le fais, il le fait), mais je ne peux pas obtenir JConsole de travail de remplissage dans l'IP et le port.

Me semble qu'il devrait être si simple, mais pas d'erreur, pas de bruit, rien. Ne fonctionne tout simplement pas.

Quelqu'un connait l'astuce pour ça?

131voto

sushicutta Points 511

J'ai une solution pour cela:

Si votre processus Java est en cours d'exécution sur Linux derrière un pare-feu et que vous voulez commencer JConsole / Java VisualVM / Java Mission de Contrôle sur Windows sur votre ordinateur pour le connecter au Port JMX de votre processus Java.

Vous avez besoin d'accéder à votre machine linux via une connexion SSH. Toutes les Communications seront acheminés au cours de la connexion SSH.

ASTUCE: Cette Solution fonctionne, peu importe si il y a un pare-feu ou pas.

Inconvénient: Chaque fois que vous redémarrez votre processus java, vous aurez besoin de faire toutes les étapes de la 4 - 9 nouveau.


1. Vous avez besoin du mastic-suite pour votre machine Windows à partir d'ici:

http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html

Au moins la putty.exe


2. Définir un Port libre sur votre machine linux:

<jmx-remote-port>

Exemple:

jmx-remote-port = 15666      


3. Ajouter des arguments de processus java sur la machine linux

Cela doit être fait exactement de cette façon. Si sa fait comme ci-dessous, il travaille pour les Machines linux derrière un pare-feu (Il fonctionne à la cause de l' -Djava.rmi.server.hostname=localhost argument).

-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=<jmx-remote-port>
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
-Dcom.sun.management.jmxremote.local.only=false
-Djava.rmi.server.hostname=localhost

Exemple:

java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=15666 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.local.only=false -Djava.rmi.server.hostname=localhost ch.sushicutta.jmxremote.Main


4. Obtenez de l'Id du Processus de votre Processus Java

ps -ef | grep <java-processname>

result ---> <process-id>

Exemple:

ps -ef | grep ch.sushicutta.jmxremote.Main

result ---> 24321


5. Trouver Port arbitraire pour RMIServer talons télécharger

Le processus java ouvre un nouveau Port TCP sur la machine linux, où le RMI Serveur Talons seront disponibles pour le téléchargement. Ce port doit également être disponible via un Tunnel SSH pour obtenir une connexion à la Machine Virtuelle Java.

Avec netstat -lp ce port peut également être constaté l' lsof -i donne des conseils en ce port qui a été ouverte le processus java.

REMARQUE: Ce port est toujours modifié lors de la java au démarrage du processus.

netstat -lp | grep <process-id>

tcp        0      0 *:<jmx-remote-port>     *:*     LISTEN      24321/java
tcp        0      0 *:<rmi-server-port>     *:*     LISTEN      24321/java


result ---> <rmi-server-port>

Exemple:

netstat -lp | grep 24321

tcp        0      0 *:15666     *:*     LISTEN      24321/java
tcp        0      0 *:37123     *:*     LISTEN      24321/java


result ---> 37123


6. Permettre à deux SSH-Tunnels à partir de votre machine Windows avec putty

Source port: <jmx-remote-port>
Destination: localhost:<jmx-remote-port>
[x] Local       
[x] Auto       

Source port: <rmi-server-port>
Destination: localhost:<rmi-server-port>
[x] Local       
[x] Auto

Exemple:

Source port: 15666
Destination: localhost:15666
[x] Local       
[x] Auto       

Source port: 37123
Destination: localhost:37123
[x] Local       
[x] Auto


Settings to open an SSL tunnel via Putty


7. Connectez-vous à votre machine Linux avec le Mastic avec ce SSH Tunnel activé.

Laissez le mastic session ouverte.

Lorsque vous êtes connecté, Putty tunnel de toutes les Connexions TCP de la machine linux sur le SSH port 22.

JMX-Port:

Windows machine: localhost:15666   >>> SSH >>>   linux machine: localhost:15666

RMIServer-Stub-Port:

Windows Machine: localhost:37123   >>> SSH >>>   linux machine: localhost:37123


8. Début JConsole / Java VisualVM / Java Mission de Contrôle pour vous connecter à votre Processus Java à l'aide de l'URL suivante

Cela fonctionne, cause JConsole / Java VisualVM / Java Contrôle de la Mission pense que vous vous connectez à un Port local sur votre machine Windows. mais Mastic envoyer tous cargaison dans le port 15666 à votre machine linux.

Sur la machine linux d'abord le processus java donne la réponse et l'envoi de la RMIServer Port. Dans cet exemple 37123.

Puis JConsole / Java VisualVM / Java Contrôle de la Mission pense qu'il se connecte à localhost:37123 et putty envoyer la totalité de la charge utile de l'avant de la machine linux

Le Processus java réponses et la connexion est ouverte.

[x] Remote Process:
service:jmx:rmi:///jndi/rmi://localhost:<jndi-remote-port>/jmxrmi

Exemple:

[x] Remote Process:
service:jmx:rmi:///jndi/rmi://localhost:15666/jmxrmi


Connect via jmx service url


9. PROFITEZ #8-]

19voto

Simon Groenewolt Points 7046

Vous êtes probablement victime d'un problème avec un pare-feu. Le "problème" est que le port que vous avez spécifié n'est pas le seul port utilisé, il utilise 1 ou peut-être même plus de 2 ports pour le RMI, et ceux-ci sont probablement bloqué par un pare-feu.

L'un des ports supplémentaires ne seront pas savoir d'avance si vous utilisez la valeur par défaut RMI de configuration, de sorte que vous avez à s'ouvrir à une grande plage de ports - qui peut ne pas amuser à l'administrateur du serveur.

Il y a une solution qui ne nécessite pas l'ouverture de beaucoup de ports cependant, j'ai eu à le faire fonctionner à l'aide de la source combinée des extraits et des conseils de

http://forums.sun.com/thread.jspa?threadID=5267091

http://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 encore le faire fonctionner :-)

11voto

Craig Day Points 1350

Êtes-vous en cours d'exécution sur Linux? Peut-être l'agent de gestion est obligatoire pour localhost:

http://java.sun.com/j2se/1.5.0/docs/guide/management/faq.html#linux1

6voto

supdog Points 41

PROTIP:

Le port RMI sont ouverts à l'arbitraire portnr. Si vous avez un pare-feu et ne veulent pas ouvrir les ports 1024-65535 (ou utiliser un vpn), alors vous devez faire ce qui suit.

Vous avez besoin de fixer (comme dans le fait d'avoir un nombre connu) le Registre RMI et JMX/RMI les ports du Serveur. Vous faites cela en mettant un pot-de fichier (catalina-jmx-remote.jar c'est en extra) dans le répertoire lib-dir et la configuration d'un spécial auditeur sous serveur:

<Listener className="org.apache.catalina.mbeans.JmxRemoteLifecycleListener"
      rmiRegistryPortPlatform="10001" rmiServerPortPlatform="10002" />

(Et bien sûr les habituels drapeaux pour l'activation de JMX

    -Dcom.sun.management.jmxremote  \
    -Dcom.sun.management.jmxremote.ssl=false \
    -Dcom.sun.management.jmxremote.authenticate=false \
    -Djava.rmi.server.hostname=<HOSTNAME> \

Voir: JMX Distance Cycle de vie de l'Auditeur à http://tomcat.apache.org/tomcat-6.0-doc/config/listeners.html

Ensuite, vous pouvez vous connecter à l'aide de cette horrible URL:

service:jmx:rmi://<hostname>:10002/jndi/rmi://<hostname>:10001/jmxrmi

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X