¿Cómo se conecta a una herramienta de línea de comandos Java con la YourKit Java Profiler?

StackOverflow https://stackoverflow.com/questions/2563777

Pregunta

He construir una herramienta de línea de comandos en Java, lo que me gustaría ahora perfil con YourKit. Pongo en marcha la herramienta de línea de comandos con algo como:

$ java -classpath .:foo.bar.jar com.foobar.tools.TheTool arg1 arg2 arg3

Se ejecuta hasta su finalización en menos de 2 segundos.

Después de leer http://www.yourkit.com/docs/80 /help/agent.jsp , he intentado lo siguiente:

$ java -agentpath:/home/dspitzer/yjp-8.0.24/bin/linux-x86-32/libyjpagent.so -classpath .:foo.bar.jar com.foobar.tools.TheTool arg1 arg2 arg3

... y me sale:

[YourKit Java Profiler 8.0.24] JVMTI version 3001016d; 14.3-b01; Sun Microsystems Inc.; mixed mode, sharing; Linux; 32-bit JVM
[YourKit Java Profiler 8.0.24] Profiler agent is listening on port 10001...
[YourKit Java Profiler 8.0.24] *** HINT ***: To get profiling results, connect to the application from the profiler UI
...

(y luego se ejecuta la herramienta hasta su finalización y sale.)

Creo que (de forma predeterminada, por lo menos) YourKit está diseñado para conectarse solamente a la ejecución de la aplicación.

¿Cómo debo modificar mi herramienta de línea de comandos para permitir la conexión de YourKit?

  1. Me podría añadir una opción de línea de comandos que tendrá que hacer una pausa para la entrada, y no voy a presionar a cambio de que se continuará hasta que haya conectados a él de YourKit.
  2. ¿Existe una API YourKit que pude añadir a mi herramienta que le causaría al bloque hasta que me he conectado con YourKit?
  3. ¿Hay una API de Java o una YourKit opción de línea de comando que lo haría crear un perfil "instantánea" que yo podría cargar y analizar más tarde (después de la herramienta de línea de comandos ha completado) con YourKit?
¿Fue útil?

Solución

No hay manera de hacer una pausa en la aplicación perfilada hasta el perfilador "conecta"; simplemente no es necesario hacerlo.

En su lugar, haga lo siguiente:

  • A su vez en modos de perfiles deseados desde el inicio. Por ejemplo, si necesidad de perfil de uso de la CPU, o bien iniciar el muestreo de la CPU o el seguimiento de la CPU con las correspondientes opciones de inicio "muestreo" o "rastreo". Ver http://www.yourkit.com/docs/80/help/additional_agent_options. JSP

  • Si la aplicación perfilada es corto en funcionamiento, permite la captura instantánea en salida con opción de inicio "OnExit = instantánea". Más tarde abierta capturado instantánea en la interfaz de usuario de perfiles para el análisis.

Otros consejos

No estoy al tanto de una opción YourKit para hacer esto (lo cual no quiere decir que no hay una sola), pero hay es una opción remota de depuración de Java para hacer esto.

Trate de añadir lo siguiente a la línea de comandos, además de las opciones de agente YourKit:

-Xrunjdwp:transport=dt_socket,address=8000,server=y,suspend=y

Esto debería hacer que la máquina virtual para suspender tan pronto como se pone en marcha, en espera de un depurador para conectar en el puerto 8000. YourKit sí mismo no es un depurador, pero como un IDE de Eclipse o NetBean hará el trabajo, así como la jdb línea básica de comandos.

Así que ejecutar el comando, con el conjunto de las dos opciones, YourKit de conexión, a continuación, utilizar un depurador para conectar con el puerto de depuración, lo que activará la máquina virtual para continuar la ejecución, lo que permite YourKit para obtener los datos que necesita.

Sería mejor que hacer todo esto utilizando YourKit, pero sé de tal manera.

Se podría lanzarlo a través de Eclipse, que tiene un plug-in YourKit, se lanza el lanzamiento de aplicaciones.

opción OnExit = instantánea de YourKit guarda un archivo de instantánea bajo $ HOME / instantáneas en la salida de JVM. Puede cargar esta instantánea en la GUI YourKit para su posterior análisis. Ver esta página en su página web para más detalles.

La respuesta a # 3 es sí, hay una API que puede utilizar para tener su producto aplicación de perfiles de resultados que YourKit continuación, puede examinar.

Tome un vistazo a la API docs , y también el de control de perfiles

Este es un ejemplo de uso de la API (no he probado este código):

Controller ykController = new Controller();
ykController.enableStackTelemetry();
ykController.enableExceptionTelemetry();
ykController.startCPUProfiling(ProfilingModes.CPU_TRACING,Controller.DEFAULT_FILTERS);
ykController.startAllocationRecording(false,0,false,0);
YourMainClass.main(args);
String snapshotLocation = ykController.captureMemorySnapshot();
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top