java linux freebsd

java - Uso de VisualVM para conectarse a una instancia jstatd remota a través de un firewall



linux freebsd (2)

Posible duplicado:
VisualVM sobre ssh

Estoy escribiendo esta pregunta y respondiéndola porque pasé unas horas haciendo que esto funcionara hoy y ninguna respuesta que encontré aquí funcionó para mí. Esperemos que esto sea útil para otros. Si tiene una solución diferente a la que terminé usando, no dude en responder también la pregunta. Si el tuyo es mejor, aceptaré el tuyo.

El problema: estoy tratando de monitorear algunas aplicaciones Java hechas en casa en mi servidor FreeBSD (esto también debería aplicarse a los servidores Linux) usando VisualVM y jstatd, pero no puedo hacer que VisualVM enumere los procesos en el servidor incluso después de que reenvió los puertos jstatd asignados y aleatorios en mi firewall y puedo ver una conexión que se está realizando mediante sockstat.



En lugar de crear una regla de firewall cada vez que ejecuto jstatd (porque cada vez que elige molesta un nuevo puerto aleatorio), funcionó con los túneles SSH.

Primero ejecuté jstatd en el servidor para encontrar qué puertos necesitaba para hacer un túnel. Esto se hace (en mi caso) creando primero un archivo de políticas llamado tools.policy con el siguiente contenido:

grant codebase "file:${java.home}/../lib/tools.jar" { permission java.security.AllPermission; };

Luego ejecuta el siguiente comando: jstatd -J-Djava.security.policy=tools.policy

Luego determiné que el puerto aleatorio jstatd estaba usando ejecutando sockstat | grep jstat sockstat | grep jstat (puede que tenga que usar netstat lugar de Linux, no estoy seguro).

Entonces digamos que el puerto aleatorio es 55663, creé dos túneles SSH en mi máquina local, uno para el puerto jstatd estándar 1099 y el otro para 55663 ejecutando los siguientes comandos en dos ventanas de terminal (no he hecho esto en Windows, pero Estoy bastante seguro de que la masilla puede hacerlo):

ssh -L 1099:localhost:1099 login_name@host_name

ssh -L 55663:localhost:55663 login_name@host_name

Una vez que se abrieron los dos túneles, abrí VisualVM y hice clic derecho en la máquina "Local" en el lado izquierdo y elegí "Agregar conexión jstatd". Hice clic en el botón "Agregar valor predeterminado" a la derecha y me aseguré de que el puerto estuviera configurado en 1099. Pulsé el botón "Aceptar" para guardarlo e inmediatamente vi que mis procesos remotos de Java aparecen en la sección "Local".