process - jdk - jvisualvm no enumera ciertos procesos de Java
visualvm jdk 10 (2)
Bien después de investigar un poco, parece que el comentario de Peter fue correcto. Debido a que los procesos de JVM fueron iniciados por otro usuario (la cuenta de SERVICIO DE RED porque estaban siendo iniciados por un servicio de Windows) no aparecieron en jvisualvm.
Solución
Dado que tengo acceso a la configuración de la aplicación, he encontrado la siguiente solución, que implica habilitar explícitamente JMX no segura para la JVM objetivo:
Agregue los siguientes parámetros de JVM:
-Dcom.sun.management.jmxremote.port=3333 -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.authenticate=false
Agregue el proceso remoto a jvisualvm usando JMX haciendo clic en Archivo -> Agregar conexión JMX. Puede conectarse al proceso utilizando el puerto 3333. Obviamente, puede cambiar el puerto si lo desea.
Enlace al artículo explicando esto con un poco más de detalle : http://download.oracle.com/javase/6/docs/technotes/guides/visualvm/jmx_connections.html
Notas
- Probablemente no sea una buena idea mantener la configuración de JVM de forma permanente, ya que permitiría a cualquier persona conectarse a la JVM a través de JMX.
- También puede agregar autenticación a los parámetros de JMX JVM si lo desea.
Quiero obtener un volcado de pila (pérdida de memoria sospechosa) de un determinado proceso de Java. Sin embargo, cuando inicio la herramienta jvisualvm, no puedo ver ninguno de los procesos en ejecución de Java.
He hecho una búsqueda de Google sobre esto y ya he encontrado un par de artículos que dicen que debes ejecutar los procesos de Java usando el mismo JDK con el que inicias la herramienta jvisualvm para poder verlos. Sin embargo, hasta donde puedo ver, este ya es el caso. Estoy haciendo todo localmente (tengo acceso remoto a la máquina).
Un par de cosas a considerar:
- Los procesos se están ejecutando en un servidor de Windows 2008 con cortafuegos
- Los procesos se están ejecutando utilizando versiones renombradas del ejecutable JDK
java.exe
- Por lo que puedo ver, los procesos se están ejecutando utilizando el 1.6.0_18 JDK
- Uno de los procesos en ejecución inicia un registro de RMI
Estoy esperando una copia virtualizada del servidor para poder jugar con ella (este es un servidor de producción). Pero mientras tanto; ¿Alguna idea de por qué no puedo ver ninguno de los procesos en jvisualvm (o jconsole para el caso)?
La forma más sencilla es ejecutar jvisualvm como administrador (win: "ejecutar como administrador"). Lo cual no es ideal pero funciona. Todos los procesos de Java son visibles entonces.