jdk - visualvm java 9
VisualVM "no compatible con esta JVM" en todas las aplicaciones locales? (13)
Cambié el nombre a mi usuario de Windows y lo configuré todo en minúscula, reinicié mi PC y todo funciona ahora.
Ya he pasado mucho tiempo cargando y probando mi aplicación, ahora necesito hacer un perfil. Pero desafortunadamente, el VisualVM siempre dice "no compatible con esta JVM" en mis aplicaciones locales.
Las aplicaciones se iniciaron en la misma JVM con VisualVM.
Como puede ver, está ejecutando VisualVM en JVM de 32 bits
No necesita desinstalar la JVM de 32 bits. Solo dígale a VisualVM que use la gira de JVM de 64 bits.
Si quieres cambiarlo permanentemente, puedes editarlo
en visualvm_13 / etc / visualvm.conf y especifique la ruta de jvm aquí
Descubrí que (al menos en Windows) uno puede escribir fácilmente pequeños archivos por lotes para ejecutar VisualVM en combinación con JVM específicas, lo cual es importante para mí, ya que he instalado el JDK de 32 bits junto con el JDK de 64 bits (necesito ambos, entonces esto es sensato para mí). He creado dos archivos por lotes en la carpeta "S: / applications / visualvm / bin /":
run_32.bat:
@echo off
START "VisualVM 32" visualvm.exe --jdkhome "C:/Program Files (x86)/Java/jdk1.7.0_07"
run_64.bat:
@echo off
START "VisualVM 64" visualvm.exe --jdkhome "C:/Program Files/Java/jdk1.7.0_07"
Obviamente, todas las rutas pueden diferir en su sistema, pero la idea general debería funcionar correctamente (en todas las versiones de 64 bits de Windows). El beneficio es que puedo usar el archivo por lotes de 32 bits cuando quiero usar VisualVM en combinación con aplicaciones Java que se ejecutan en la JVM de 32 bits, y así sucesivamente para 64 bits.
El comando "inicio" tiene el único beneficio de que el archivo de proceso por lotes inicia la aplicación sin esperar a que finalice, por lo que la ventana del símbolo del sistema se cierra de inmediato. Esta no es una característica de VisualVM, sino del intérprete de archivos por lotes de Windows.
En Linux: asegúrese de que su / etc / hosts hace referencia correctamente a la dirección IP efectiva de su "nombre de host". Parece que una discrepancia aquí confunde totalmente a los pobres jvisualvm y sus programadores.
En mi caso, incluso con la coincidencia de JVM (ambas de 64 bits), la única forma de hacer que las cosas funcionen fue enviando el argumento -Dcom.sun.management.jmxremote
a la JVM a supervisar. Eso también funciona si tiene problemas para conectarse a través de Java Mission Control (JMC).
De acuerdo con la documentación de JMX , esto es lo que hace el argumento:
El establecimiento de esta propiedad registró los MBeans de la plataforma Java VM y publicó el conector de Invocación de método remoto (RMI) a través de una interfaz privada para permitir que las aplicaciones cliente JMX monitoreen una plataforma Java local, es decir, una VM Java ejecutándose en la misma máquina que el cliente JMX .
Se suponía que se debía habilitar automáticamente, pero por alguna razón no estaba en mi Linux.
Estaba teniendo el problema de que visualvm detectara mi instalación local de tomcat en Windows 7. Pude conectarme manualmente, pero luego cosas como instantáneas de memoria y plugin visualgc no fueron habilitadas. Confirmé que estaba usando la misma versión de JVM, los permisos de archivos temporales, etc. No funcionó. Luego descubrí que al comenzar visualvm primero, y luego a tomcat, se resolvió el problema.
Mi problema eran las optimizaciones de JVM: -XX:+PerfDisableSharedMem
indicador de PerfDisableSharedMem romperá VisualGC. Esto es evidente si jps no mostrará su aplicación en la lista.
Para mí, la razón es que he ejecutado el "jstatd" con un usuario diferente con el proceso de JVM. Tengo un usuario especial en Linux para iniciar el hilo JVM (es un tomcat), pero empiezo el proceso jstatd con root. Si usa root para ejecutar jps, no puede ver ninguna información de los hilos JVM que pertenecen a otros usuarios. Ese es el problema. Maté el proceso "jstatd" iniciado por root, su al propietario del proceso de JVM, y reinicié el proceso "jstatd" y todo funciona bien ahora.
Puedo reproducir el siguiente comportamiento. Tengo una aplicación Java con un elemento de menú con el botón derecho para abrir jvisualvm. Estoy ejecutando esta aplicación java como una instalación independiente de un archivo bat. Significa que modifico% path% y otras variables de entorno necesarias como JDK en consecuencia para formar mi entorno. El BAT que inicia la aplicación se marca ejecutándose como no administrador. El entorno apunta a un JDK de 64 bits. Luego, inicio otra aplicación Java como administrador. VM vive desde la misma fuente JDK de 64 bits. Entonces comienzo jvisualvm desde la primera aplicación con el clic derecho, es decir, como no administrador. Puedo ver la aplicación en jvisualvm ''Lista de aplicaciones'', pero al hacer clic en ''Propiedades del sistema'' aparece un error. El mensaje es "No admitido para esta JVM". Los argumentos de JVM están expuestos.
La solución es como en algunos otros comentarios anteriores: Comenzando mi clic derecho jvisualvm-starter como administrador, también veo "propiedades del sistema". Ciertamente, si los JDK serían de 32 bits y otros de 64 bits, no funcionarían. estado allí.
Pensé que esta noción debía agregarse aquí debido a este pequeño tirón de medio trabajo.
También conocí este problema. Mi caso es que en linux, comencé tomcat con tomcat_user pero ejecuto jvisualvm con usuario root. Funciona después de iniciar tomcat con usuario root.
Un problema que acabo de encontrar, gracias a la sugerencia de @ user3356656, es que si inicia el programa mientras su máquina está en una IP y luego trata de conectarse mientras está en una IP diferente, fallará.
VisualVM debe ejecutarse con la misma JVM (al menos Java 6 con el mismo tamaño de 32 bits / 64 bits) que el programa a perfilar. (También debe ser el mismo usuario, pero este mensaje no se aplica).
Sería una verificación triple de que era exactamente la misma JVM en su situación.
Yo también tengo el mismo problema para tomcat local, busco soluciones para . después de una depuración seria, descubrí que VisualGC no tiene permisos para obtener información de GC del archivo tool.jar.
por enlaces
http://docs.oracle.com/javase/7/docs/technotes/tools/share/jstatd.html#SECURITY https://.com/a/42107355/3876619
Estoy siguiendo los pasos para resolver el problema
1) Crea un archivo de permiso
vim /tmp/tools.policy
Añadir
grant codebase "file:${java.home}/../lib/tools.jar" {
permission java.security.AllPermission;
};
guardarlo
2) Ahora agrega /tmp/tools.policy a los parámetros de inicio de JVM
-Djava.security.policy=/tmp/tools.policy
3) Ejecute jvisualVm con sudo