2011-02-01 36 views
12

Estoy intentando consultar una JVM remota con jps utilizando jstatd, para eventualmente monitorearlo usando VisualVM.jps no se puede conectar a un jstatd remoto

yo nos jstatd corriendo con la siguiente política de seguridad:

grant codebase "file:${java.home}/../lib/tools.jar" { 

    permission java.security.AllPermission; 
}; 

jstatd se está ejecutando en una máquina Linux de 64 bits con una máquina virtual HotSpot versión 1.6.0_10. El comando jstatd es:

jstatd -J-Djava.security.policy=jstatd.tools.policy -J-Djava.rmi.server.logCalls=true 

Estoy tratando de ejecutar jps desde una máquina con Windows 7. Debido a las restricciones de firewall, estoy un túnel de los datos RMI a través de un túnel SSH a mi máquina de Windows de tal manera que la línea de comandos es JPS:

.\jps.exe -m -l rmi://localhost 

Cuando corro JPS, veo el intento de conexión en el registro de jstatd, el cual tiene el siguiente aspecto:

Feb 1, 2011 11:50:34 AM sun.rmi.server.UnicastServerRef logCall 
FINER: RMI TCP Connection(3)-127.0.0.1: [127.0.0.1: sun.rmi.registry.RegistryImpl[0:0:0, 0]: java.rmi.Remote lookup(ja va.lang.String)] 

pero en el lado JPS me sale el siguiente error:

Error communicating with remote host: Connection refused to host: 192.168.1.137; nested exception is: 
    java.net.ConnectException: Connection refused: connect 

Basado en el intento de conexión que aparece en el registro de jstatd, creo que es en realidad re JPS duele el host, pero por alguna razón se bloquea. ¿Existe alguna política de seguridad que haya establecido u otra configuración en alguna parte que pueda cambiar para que pueda obtener jps para extraer las estadísticas del jstatd remoto?

+0

Podría ser que no haya establecido las propiedades de jmxremote en la aplicación que deseo monitorear, como se describe aquí: http://stackoverflow.com/questions/726643/get-heap-dump-from-a-remote-application-in-java-using-jvisualvm – afrosteve

Respuesta

13

Supongo que solo está reenviando el puerto de registro RMI (1099), pero también necesita abrir otro puerto.

Compruebe qué puertos en el lado alejado

# netstat -nap | grep jstatd 

tcp  0  0 :::1099  :::*  LISTEN  453/jstatd   
tcp  0  0 :::58204 :::*  LISTEN  453/jstatd   

En este caso, tendrá que remitir 58204 puerto, así como 1099

+0

No, eso no ayudó. Me tunelé al otro puerto, 45998 en mi caso, pero jps todavía no se pudo conectar. – afrosteve

+1

El túnel no ayudó, pero sí la apertura de más puertos. Usted tenía razón. Gracias. – afrosteve

+0

@afrosteve: ¿puedes explicar qué otros puertos abriste y cuál tú canalizaste? –

0

Aquí es cómo se puede hacer esto fácilmente.

  1. lanzamiento ejstatd en su host remoto de esta manera (la ejecución de la carpeta ejstatd): mvn exec:java -Dexec.args="-pr 2000 -ph 2001 -pv 2002"
  2. abrir esos 3 puertos en el host remoto y ponerlos a disposición en el equipo local: 2000, 2001 y 2002
  3. en el equipo local, usted será capaz de utilizar jps sustituyendo <remotehost> con su nombre de host remoto: jps -m -l rmi://<remotehost>:2000

Descargo de responsabilidad: soy el autor de la herramienta de código abierto ejstatd

Cuestiones relacionadas