VisualVM en ssh
(7)
Debe ejecutar jstatd en el lado remoto o especificar una conexión JMX usando host: puerto.
Jstatd:
jstatd -J-Djava.security.policy=permissions.txt [-p port]
Después de eso: agregue una conexión remota a la máquina de destino, y en las propiedades de esa conexión remota configure la conexión jstatd.
(permissions.txt contiene por ejemplo esto:
grant {
permission java.security.AllPermission;
};
Editar: (Respuesta para comentar)
-
ssh -D 9696 me@remote
, y ejecute jstatd como se indica arriba 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. - ejecute
visualvm.exe -J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true
en la máquina local en vm visual: agregue una nueva conexión remota y especifique el control remoto como host 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
He leído Visual VM de forma remota a través de ssh, pero creo que no lo he entendido porque no funcionaba para mí :-( Por favor, ¿alguien puede dar un ejemplo?
ssh -D 9696 [email protected]
y visualvm.exe -J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true
inicia visualvm, pero no se muestran procesos de la máquina externa (solo los locales como visualvm en sí). Además, algunas veces (pero no siempre) recibí el mensaje "canal 3: error abierto: conexión fallida: conexión rechazada" en mi ventana ssh.
¿Alguna ayuda?
Encontré que en los argumentos de jvm 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.
Estaba teniendo el mismo problema al conectar jVisualVM a una aplicación remota a través de ssh.
Este tutorial me ayudó a resolver mi problema. http://issamben.com/how-to-monitor-remote-jvm-over-ssh/
Para resolver este problema, asegúrese de:
configura 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
ssh tunnel está establecido correctamente
ssh -i yourPermissionFile.pem -l username 101.101.101.101 -L 9010:localhost:9010 -L 9011:localhost:9011
Pruebe con una versión diferente de jvisualvm (por ejemplo, la más nueva de https://visualvm.github.io/download.html )
No pude hacer que funcione con jvisualvm, ya que no usé el proxy SOCKS (no vi 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.
También encontré que los argumentos de jvm:
-J-Dnetbeans.system_socks_proxy=localhost:9696 -J-Djava.net.useSystemProxies=true
no funcionó en la compilación que estoy usando 1.3.2.
Por lo tanto, utilicé Herramientas> Opciones> Red y lo configuré manualmente en la configuración SOCKS.
PERO VisualVM sí todavía no encontró los procesos remotos. Luego eliminé el servidor "No proxy hosts" de localhost, ya que esto probablemente lo bloqueó.
Tengo otra solución usando tunneling 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, puede usar autenticación o SSL).
Conéctese mediante ssh al servidor y reenvíe su puerto local1 y puerto2 a localhost: puerto1 | 2 y al servidor.
En VisualVM, abra una conexión JMX a localhost: port1 (sin ninguna configuración de proxy).
Tuve el problema de jstatd binding en localhost, 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 uso estos parámetros en su lugar
jvisualvm -J-DsocksProxyHost=localhost -J-DsocksProxyPort=<socks-port>
De esta manera, conectando por el proxy ssh, podría usar la dirección IP real de mi máquina remota.
Robando de esta respuesta me hice un recordatorio completo en mi sitio ... espero que no te importe Ankon Gracias por esto, por cierto :)