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.
Consulte esta sección " Ejecución de VisualVM a través de un túnel ssh con SOCKS " para obtener otra solución.
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".