monitoring - No se puede conectar un host remoto a VisualVM
jmx (5)
Soy nuevo en Java y tengo problemas para conectar un host remoto a JVisualVM
.
Busqué en Internet y seguí todos los pasos mencionados allí, pero todavía no puedo resolver el problema. Los pasos que seguí son:
Comencé jstatd en el servidor remoto creando primero un archivo
jstatd.all.policy
en$JAVA_HOME/bin
. El archivo contenía:grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission;};
Comencé el
Jstatd
comojstatd -J-Djava.security.policy=jstatd.all.policy
Comencé la aplicación Java en el host remoto como:
java -Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.port=9000 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false application_name
Luego comencé como instancia de
JVisualVM
en mi máquina local y, al agregar el host remoto, se conectó, pero no pude ver ninguno de los procesos de Java.
¿Alguien puede por favor ayudarme con esto?
Gracias.
Aquí están los pasos para hacer esto:
- Ejecute un ejstatd en su host remoto de esta manera (en la carpeta ejstatd):
mvn exec:java -Djava.rmi.server.hostname=<remote_host_name> -Dexec.args="-pr 1099 -ph 1100 -pv 1101"
(usado para conexión de tipo "jstatd") (solo especifique-Djava.rmi.server.hostname
si el nombre de host de su host remoto no coincide con el que está viendo desde su red local) - Inicie su aplicación Java con esos parámetros Java adicionales:
-Dcom.sun.management.jmxremote -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.port=1102 -Dcom.sun.management.jmxremote.rmi.port=1102 -Djava.rmi.server.hostname=<remote_host_name>
(usado para la conexión de tipo "JMX") (la misma observación que el punto anterior para-Djava.rmi.server.hostname
) - Abra esos 4 puertos en su host remoto y haga que estén disponibles para su máquina local:
1099
,1100
,1101
y1102
- Lanzar JVisualVM
- Haga clic con el botón derecho en "Remoto"> "Agregar host remoto ..." e ingrese su nombre de host remoto en "Nombre de host" (si no usa el puerto
1099
, puede cambiar esto en "Configuración avanzada") - Haga clic con el botón derecho en el host remoto que acaba de crear> "Agregar conexión JMX ..." e ingrese "
<remote_host_name>:1102
" en la entrada "Conexión", y marque "No requiere conexión SSL" - El proceso de Java aparecerá dos veces: uno del tipo de conexión "jstatd" y otro del tipo de conexión "JMX".
- Haga clic con el botón derecho en "Remoto"> "Agregar host remoto ..." e ingrese su nombre de host remoto en "Nombre de host" (si no usa el puerto
Descargo de responsabilidad: soy el autor de la herramienta ejstatd código abierto.
Debe iniciar jstatd con la opción adicional que apunta a la IP externa o al nombre de host del servidor:
statd -J-Djava.security.policy=jstatd.all.policy -J-Djava.rmi.server.hostname=my_server_ip/hostname
Respuesta basada en: https://java.net/projects/visualvm/lists/users/archive/2010-03/message/8
Encontré problemas similares cuando me conecté al servidor de aplicaciones Glassfish. Mira las soluciones que funcionaron para mí, ya que pueden ser iguales para ti:
- Intente configurar en su aplicación:
-Djava.rmi.server.hostname = * Remote_Server_External_IP_Address *
Si el bloqueo del Firewall es un problema, entonces recomiendo probar XMing con el túnel SSH (que es fácil de configurar). Aquí hay instrucciones, si tiene problemas para configurarlo:
Uso remoto de VisualVM con Xming (mi blog) La mayor ventaja de usar XMing es que funcionará casi siempre cuando SSH está habilitado. Solo tiene que colocar los archivos de VisualVM en el host remoto y ejecutarlo desde la línea de comandos. XWindow mostrará la ventana de VisualVM en su computadora local.Existe la posibilidad de que sea un problema de VisualVM: intente usar alguna otra herramienta solo para verificar qué está mal. Recomiendo JConsole . Funciona de manera similar a VisualVM y también describí detalles en mi blog
Inicie jstatd en nohup en el servidor que se debe monitorear y conecte VisualVM
al puerto jstatd, siguiendo los pasos a continuación:
Paso 1 : Cree start-jstatd.sh
y copie el contenido a continuación:
nohup jstatd -p 1099 -J-Djava.security.policy=<(echo ''grant codebase "file:${java.home}/../lib/tools.jar" {permission java.security.AllPermission;};'') &
Paso 2: Dar permiso ejecutable al archivo:
$ chmod a+rwx start-jstatd.sh
Paso 3: Iniciar jstatd:
$ sh start-jstatd.sh
Paso 4: Agregar host remoto en VisualVM
:
Paso 5: Agregue la conexión JMX al host remoto , como se muestra en la imagen de abajo y haga clic en el botón Aceptar:
Para conectarse a una máquina virtual remota , debe iniciar esa máquina virtual remota con opciones específicas :
java
-Dcom.sun.management.jmxremote
-Dcom.sun.management.jmxremote.port=9000
-Dcom.sun.management.jmxremote.ssl=false
-Dcom.sun.management.jmxremote.authenticate=false
class
Una vez iniciada la VM, vaya a su VisualVM y haga lo siguiente:
- Archivo -> Agregar conexión JMX
- Escriba: yourHostName: 9000 y haga clic en Aceptar
- A la izquierda tendrá la conexión JMX agregada, haga doble clic en ella y listo.
Más detalles sobre la Plataforma de Monitoreo y Administración de Java se pueden encontrar here .