2010-12-13 13 views
20

JDK 1.6 viene con una práctica herramienta llamada VisualVM que le permite inspeccionar e interactuar con los procesos en ejecución de Java. Una característica es que detecta automáticamente las JVM en ejecución en la máquina local. La mayoría se enumeran como "(pid xxxx)", pero algunos tienen un nombre y un icono, como VisualVM y otros como NetBeans (consulte la captura de pantalla en this dzone article, por ejemplo).¿Cómo le doy un nombre a un VisualVM "<Aplicación desconocida>"?

¿Cómo puedo insertar el nombre y el icono de mi aplicación en la JVM para que se muestre correctamente en la lista de aplicaciones de VisualVM? ¿Mi aplicación necesita ejecutar JRE 1.6 o puedo hacerlo también en 1.5?

+0

Aquí hay una pista que aprendí al mirar LocalVmManager en OpenJDK: la lista de máquinas virtuales locales se descubre al buscar en $ TMP/hsperfdata_ $ USER /. Cada archivo allí se nombra para el PID de la VM. Contenida allí está la línea de comando como "sun.rt.javaCommand" pero el archivo para el proceso de VisualVM no contiene la cadena "VisualVM" por lo que no puede venir directamente de ese archivo. –

Respuesta

26

Resolví la mitad de mi propia pregunta a través de una respuesta NetBeans forum post. Agregar una línea de comandos de JVM arg de -Dvisualvm.display.name=FooBar hace que VisualVM muestre la aplicación como "FooBar". Pero todavía no puedo entender cómo afectar el ícono.

ACTUALIZACIÓN: Por desgracia, creo que encontré mi respuesta para el icono. Los iconos están codificados de forma rígida en VisualVM a través del MainClassApplicationTypeFactory en el origen de VisualVM, invocado desde el método estático ApplicationTypeFactory.getApplicationTypeFor (Application). No veo ninguna forma de inyectar un nuevo ícono en VisualVM, excepto haciendo un plugin de VisualVM que podría registrar una nueva fábrica de tipos: el plugin de Glassfish lo hace a través de GlassFishApplicationTypeFactory.initialize(), por ejemplo.

+0

Gracias, Chris. Me preguntaba eso el viernes. ¡No más juego de adivinanzas! –

+1

Más consejos para futuros lectores: me parece que no puede haber espacios en el nombre de la aplicación. Es decir, -Dvisualvm.display.name = Foo Bar y -Dvisualvm.display.name = "Foo Bar" no funcionan. –

+0

es una lástima tener que escribir un plugin y registrarse solo para tener una representación visual decente de la aplicación que desea rastrear. Tal vez un manifiesto como archivo que VisualVM descubrió automáticamente sea agradable ... o simplemente use el icono de la aplicación ... de alguna manera – Alex

Cuestiones relacionadas