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
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
9. PROFITEZ #8-]