2009-10-22 18 views
37

He leído Visual VM remotely over ssh pero creo que no he entendido plenamente, ya que no estaba trabajando para mí :-(favor, alguien puede dar algún ejemplo?VisualVM sobre ssh

ssh -D 9696 [email protected] y visualvm.exe -J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true comienza VisualVM, pero no hay procesos de la máquina externa se muestran (solo los locales como Visualvm en sí). Además, a veces (pero no siempre) recibí el mensaje "canal 3: abrir falló: conexión fallida: conexión rechazada" en mi ventana ssh.

Cualquier ayuda ?

+0

Don tienes que conectarte a el host remoto de VisualVM? No tengo una máquina ahora mismo para probar, pero solo creaste un proxy de calcetines, aún tienes que hacer algo con él. –

+0

Gracias por su comentario. He intentado varias "variaciones", pero ninguna de ellas funcionaba. – bgraves

+0

A partir de 2015 puede tunelizar los puertos jmx y rmi ver [mi respuesta] (http://stackoverflow.com/a/32418821/241986) –

Respuesta

35

Debe ejecutar jstatd en el lado remoto o especificar un J Conexión MX usando host: puerto.

Jstatd:

jstatd -J-Djava.security.policy=permissions.txt [-p port]

Después de eso: añadir una conexión remota a la máquina de destino, y de las propiedades de conexión remota que configurar la conexión jstatd.

(permissions.txt contiene, por ejemplo, esto:

grant { 
    permission java.security.AllPermission; 
}; 

Editar:. (respuesta al comentario)

  1. ssh -D 9696 [email protected], y ejecutar jstatd que el anterior en la línea de comandos remota Si desea que jstatd esté en un puerto diferente al predeterminado 1099, use el argumento -p para jstatd.
  2. ejecute visualvm.exe -J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true en la máquina local
  3. en vm visual: agregar nueva conexión remota, y especificar remoto como host y el puerto para jstatd (1099 por defecto, o lo especificado con -p cuando se ejecuta jstatd)

    Ahora debería ver los procesos en el lado remoto en visualvm

+0

Lo siento, pero no lo entiendo. Puedo iniciar la línea jstatd en el lado remoto, pero ¿tengo que ir allí con "ssh -D 9696 me @ remote" o es "ssh me @ remote" suficiente? Todavía necesito las cosas de proxy para visualvm, y así sucesivamente. Es vergonzoso, pero creo que necesito una guía paso a paso. – bgraves

+0

1) ssh -D 9696 me @ remote, y ejecute jstatd como se indicó anteriormente en la línea de comando remota. Si desea que jstatd esté en un puerto diferente al predeterminado 1099, use el argumento -p para jstatd. 2) ejecute visualvm.exe -J-Dnetbeans.system_socks_proxy = localhost: 9696 -J-Djava.net.useSystemProxies = true en el equipo local 3) en vm visual: agregue una nueva conexión remota y especifique el host remoto y el puerto para jstatd (1099 por defecto, o lo que especificó con -p al ejecutar jstatd) Ahora debería ver los procesos en el lado remoto en visualvm – ankon

+0

Ah, ahora funciona, ¡muchas gracias! :-) – bgraves

2

Encontré que en el jvm los argumentos para el proxy no funcionan. Al menos en la versión 1.3.3 (compilación 111013). Configurar el proxy en Herramientas> Opciones> Red trabajó para mí. También la configuración de proxy de todo el sistema debería funcionar aunque, por definición, afecte a todas las otras conexiones de red.

3

También encontré que los argumentos de JVM:

-J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true 

no trabajaban en la construcción estoy usando 1.3.2.

Por lo tanto, utilicé Herramientas> Opciones> Red y lo configuré manualmente en la configuración SOCKS.

PERO VisualVM sí no encontró los procesos remotos. Luego eliminé el servidor "No proxy hosts" de localhost, ya que esto probablemente lo bloqueó.

9

tuve el problema de la unión en el servidor local jstatd, así que tuve que escribir

jstatd -J-Djava.security.policy=allPerm.policy -J-Djava.rmi.server.logCalls=true -p <port> -J-Djava.rmi.server.hostname=<my ip> 

también para jvisualvm i utilizar estos parámetros en lugar

jvisualvm -J-DsocksProxyHost=localhost -J-DsocksProxyPort=<socks-port> 

esta manera, la conexión por el proxy SSH, podría usar la dirección IP real de mi máquina remota.

Robo a esta respuesta me hice un recordatorio completa en my site .. i espero que no le importe ankon Gracias por esto, por cierto :)

+0

Establecer proxy en la interfaz de usuario no funciona para mí, especifíquelo en la línea de comandos funciona. Gracias. Por cierto, estoy usando la versión 1.8.0_25 (Build 140407) –

+2

Definiendo el proxy SOCKS en la interfaz gráfica de usuario visualvm no funcionó para mí. Sin embargo, estos argumentos de CLI funcionaron bien. – Will

11

tengo otra solución utilizando túneles SSH estándar y sin puertos de firewall para abrir. Para mí, el proxy SOCKS no funciona.

Comience su JVM con opciones:
-Dcom.sun.management.jmxremote = true
-Dcom.sun.management.jmxremote.ssl = false
-Dcom.sun.management.jmxremote.authenticate = false
-Dcom.sun.management.jmxremote.port = [port1]
-D java.rmi.server.hostname = localhost
-Dcom.sun.management.jmxremote.rmi.port = [ port2]

La parte importante es "server.hostname = localhost". Además, defina explícitamente ambos puertos (conecte + puerto RMI "aleatorio"), "jmxremote.rmi.port" necesita al menos la actualización 4 de Java 7 (leí en alguna parte, no compruebe esta información - use "lsof -i" en su máquina del servidor para verificar los puertos realmente usados).

(Por supuesto, es posible utilizar la autenticación o SSL.)

conecte vía SSH al servidor y enviar su local de port1 y port2 a localhost: puerto 1 | 2 un servidor.

En VisualVM abre una conexión JMX a localhost: puerto1 (sin ninguna configuración de proxy).

+1

Excelente información ... esto lo resolvió para mí usando tunneling SSH. La clave fueron los 2 puertos que deben configurarse y reenviarse. – Shane

+1

FYI * port1 * puede ser igual a * port2 * para que pueda usar solo un puerto –

+0

¡Hizo mi día hombre! eres una bestia – Aladdin

0

Prueba una versión diferente de jvisualvm (por ejemplo, la más reciente de https://visualvm.github.io/download.html)

no pude hacer que funcione con jvisualvm, ya que no utilizó el proxy SOCKS (No he visto nada relacionado con jvisualvm en ssh -v -D 9696). Las aplicaciones remotas nunca aparecieron en jvisualvm. VisualVM sin embargo los mostró después de algunos segundos.

3

Estaba teniendo el mismo problema al conectar jVisualVM a una aplicación remota a través de ssh.

This Tutorial me ayudó a resolver mi problema.http://issamben.com/how-to-monitor-remote-jvm-over-ssh/

Para resolver este problema asegúrese de que:

  • configurar dos puertos en la configuración JVM

    -Dcom.sun.management.jmxremote.ssl=false 
    -Dcom.sun.management.jmxremote.authenticate=false 
    -Dcom.sun.management.jmxremote.port=9010 
    -Dcom.sun.management.jmxremote.rmi.port=9011 
    -Djava.rmi.server.hostname=localhost 
    -Dcom.sun.management.jmxremote.local.only=false 
    
  • túnel SSH está correctamente establecida

    ssh -i yourPermissionFile.pem -l username 101.101.101.101 -L 9010:localhost:9010 -L 9011:localhost:9011 
    
+0

¡Muchas gracias por compartir esto! Funcionó para mí –