2012-05-11 14 views
8

Estoy ejecutando Tomcat 6 en un servidor Linux en la nube de Amazon. Intento conectarme con VisualVM desde mi Mac en mi oficina. He permitido abrir todos los puertos TCP entre mi escritorio y el servidor, pero no puedo hacer que VisualVM haga nada.Depuración conexión remota VisualVM

En la máquina Linux, he empezado con Tomcat:

-Dcom.sun.management.jmxremote 
-Dcom.sun.management.jmxremote.port=9191 
-Dcom.sun.management.jmxremote.ssl=false 
-Dcom.sun.management.jmxremote.authenticate=false 

en mi Mac, pongo en marcha VisualVM y seleccione Archivo -> Nueva conexión JMX ...

entro amazonhostname.com: 9191 en el cuadro. Dice "Agregar amazonhostname.com:9191 ..." y se queda allí varios minutos antes de que se agote el tiempo de espera.

Desde mi Mac, puedo "telnet amazonhostname.com 9191" bien, y probé algunos otros puertos aleatorios, y todos funcionaron. Estoy bastante convencido de que no es un problema de firewall, a menos que necesite abrir UDP o ICMP o algo así. (¿Realmente?)

No hay nada en catalina.log en el servidor, o la consola del sistema en mi Mac, relacionado con jmx. netstat en el servidor muestra 9191 y algunos otros puertos se abren en todas las interfaces.

No hay jstatd en el servidor remoto. ¿Es eso un requisito previo para JMX? (Soy totalmente nuevo en Java y no estoy seguro de lo que significan esas cosas, pero lo vi en una publicación de blog en algún lugar. Estoy agarrando pajas ahora.)

+0

¿Se ha asegurado de que iptables no esté bloqueando la conexión en su linux box? EDIT: veo que puedes telnet, está bien, rayar eso. –

+1

La otra cosa que debe observar es el nombre de host de RMI; consulte: http://stackoverflow.com/questions/9985293/how-do-i-use-jconsole-to-connect-to-ec2 –

+1

Jstatd no es necesario. Como Greg sugirió intente agregar -Djava.rmi.server.hostname = the.public.ip a los argumentos de Tomcat JVM. –

Respuesta

18

Establezca la propiedad del nombre de host antes de que comience la VM :

java -Dcom.sun.management.jmxremote \ 
    -Dcom.sun.management.jmxremote.port=9191 \ 
    -Dcom.sun.management.jmxremote.authenticate=false \ 
    -Dcom.sun.management.jmxremote.ssl=false \ 
    -Djava.rmi.server.hostname=the.public.ip \ 
    -jar program.jar 

Agregue las reglas relevantes a su grupo de seguridad.

+0

Desafortunadamente, no funcionará para escalar automáticamente como Elastic Beanstalk. – mwoodman

+0

@mwoodman: No he usado EB, pero ¿sabe por qué esto no es aplicable (para que los usuarios de búsquedas posteriores lo sepan)? –

+1

Creo que el -Dcom.sun.management.remote.ssl = falso debería ser -Dcom.sun.management.jmxremote.ssl = falso –