2009-06-27 25 views
15

Tengo problemas para supervisar un proceso de Tomcat remoto. Estoy tratando de usar las versiones Java 6 de JConsole/JVisualVM.No se puede conectar a Tomcat con VisualVM

he jstatd que se ejecuta en el servidor remoto con la política de seguridad adecuada. El proceso se inicia y las conexiones TCP están disponibles.

Cuando intento conectar a través de JConsole, me sale 'Connection Failed:jmxrmi'.

Cuando intento conectar a través VisualVM, agrego el nombre de host y mis opciones que aparece son 'Añadir JMX Conexión'. No está claro para mí de los documentos si eso es lo que esperaría ver. Cuando intento conectar, consigo:

'Cannot connect using service:jmx:rmi:///jndi/rmi://<host>:<port>/jmxrmi'. 

Así, los documentos sugieren que sólo tiene por qué tener jstatd ejecutar de forma remota para monitorear en VisualVM, mientras que la interfaz de usuario está pidiendo jmxrmi .. Son los que la misma? Intenté configurar tomcat utilizando las opciones de rmi de jmx y también caduqué, aunque sé que no es un problema de firewall.

Si alguien ha tenido éxito conseguir un proceso Tomcat remoto conectado de esta manera, y podría describir cómo, que me ayudaría mucho.

Respuesta

13

necesita habilitar las extensiones de gestión a la máquina virtual Tomcat. Por lo general, eso significa que pasa en algo como esto:

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

Por supuesto, si lo haces de la manera anteriormente asegurarse de que su Tomcat no es visible en Internet o en el puerto bajo el cortafuegos de acceso remoto o tomar medidas de seguridad similares para evitar ser escaneado y comprometido. De lo contrario, use las opciones de autenticación.

15

Por lo general, tienen que asegurarse de que especifica la dirección IP del servidor en los JAVA_OPTS. De lo contrario, parece que JMX le enviará instrucciones al cliente para que se vuelva a conectar al servidor en un puerto diferente y si no tiene la dirección IP para darle al cliente, la conexión falla.

El argumento para esto es:

-Djava.rmi.server.hostname=1.2.3.4 

Puede encontrar más detalles en este walk through del proceso de instalación.

+5

Hola @Tom, tu paseo por los enlaces me ayuda. Big +10, tanquete! El '-Djava.rmi.server.hostname = 1.2.3.4' es obligatorio, si el servidor tiene diferentes adaptadores (como en vpn, etc.) – azendh

+0

¡Esto también funcionó para mí! ¡Muchas gracias! – FSP

+0

Gran ayuda de hecho ... Gracias! –

2

El puerto JMX normalmente envía datos a otro puerto, por lo que necesita encontrar ese número de puerto ejecutando lsof -p -n | grep TCP y habilite permisos para ese puerto y luego intente conectarse al agente JMX remoto.

2

De hecho, acabo de abordar este problema y lo descubrí.

Me gustaría apostar que el problema son las conexiones RMI: no se puede predecir qué puertos utilizará y por lo tanto no se puede hacer funcionar con un firewall.

La solución consiste en utilizar un proxy SSH:

  1. SSH a la caja donde se ejecuta la aplicación, sino utilizar la opción -D así:

    ssh usuario @ remoteHost -D 9999

    Esto iniciará un proxy calcetines en su máquina local en el puerto 9999.

  2. abierto jvisualvm y en las preferencias, en virtud de la 'red' configurar i t utilizar un proxy calcetines en localhost, en el puerto 9999.

Si haces lo anterior, a continuación, debe ser capaz de conectarse a la máquina remota como normal y ya que todo el tráfico de RMI ahora va hacia la Proxy SSH, se perfora a través del firewall y funciona bien.

Buena suerte :-)

Cuestiones relacionadas