2011-10-22 12 views
8

Estoy intentando supervisar/perfilar selectivamente una aplicación Java cuando se cumplen ciertas condiciones de tiempo de ejecución. Ya puedo descargar el montón sobre la marcha usando el HotSpotDiagnosticMXBean, que ha sido bastante útil.Inicio de Java HPROF Profiler sobre la marcha programáticamente

Ahora estoy tratando de hacer algo similar con el perfil de la CPU, con la esperanza de apuntar de manera más efectiva rutas de código específicas. Tengo cierta experiencia con la línea de comandos HPROF interface y el generador de perfiles NetBeans, pero ambos deben iniciarse de antemano.

¿Hay alguna forma de activar el perfilador HPROF programáticamente desde una aplicación en ejecución? ¿Preferiblemente algo que me permita comenzar y detener el proceso de creación de perfiles a voluntad?

Respuesta

1

De acuerdo con JVMTI documentation, las librerías de agentes nativos como hprof se deben cargar muy temprano durante la inicialización de JVM, antes de que se ejecute cualquier bytecode. Entonces no, no es posible hacer esto sobre la marcha.

Una alternativa podría ser relanzar el proceso de java con parámetros de JVM modificados dentro de la función principal, aunque esto no es trivial.

+0

Lamentablemente, esta parece ser la respuesta correcta, al menos en lo que respecta a HPROF ... +1 – thkala

+0

No estoy seguro de que esta sea una buena respuesta. Depende de más precisamente lo que aborda la pregunta original. La documentación citada dice que el agente de creación de perfiles debe comenzar antes de que la JVM ejecute cualquier código ... no dice que el perfilado debe comenzar antes de que el código comience a ejecutarse. El generador de perfiles puede comenzar y el perfil _ puede comenzar más tarde. Una forma programática para controlar cuándo comienza el perfil sería muy útil. ¿Puedes decir que _profiling_ debe comenzar antes de que se ejecute cualquier código? Y citar una referencia? – Jason

Cuestiones relacionadas