Configuración de YourKit Java Profiler

Problema

¿Cómo configuro YourKit Java Profiler para que funcione con CQ3.x o CQ4.x?

Solución

Instalación de YourKit

  1. Descargue el agente YourKit para su sistema operativo (vea los vínculos en la parte inferior de la página).

  2. Instale el perfilador YourKit.

  3. Inicie el perfilador YourKit (JDK 1.5 es necesario para ejecutar el perfilador).

    • Windows: Inicie “YourKit Java Profiler” desde el menú Inicio.
    • Linux, Solaris: Ejecute YourKit Java Profiler Home > /bin/yjp.sh.
    • Mac OS X: Cuando la aplicación descargada se descomprima, haga clic en su icono.

Permita la creación de perfiles

Es posible habilitar la creación de perfiles directamente en un servidor IDE o incluso J2EE. Sin embargo, puede ser mejor permitir que la creación manual de perfiles sea independiente de los servidores IDE o J2EE. El procedimiento difiere de un sistema operativo a otro.

Sistema operativo Acción
Windows, Java de 32-bit añadir <!YourKit Java Profiler Home>\bin\win32 a la ruta
Windows, Java de 64 bits añadir <!YourKit Java Profiler Home>\bin\win-amd64 a la ruta
macOS X añadir <!YourKit Java Profiler Home>/bin/mac a DYLD_LIBRARY_PATH
Linux x86, Java de 32-bit añada <!YourKit Java Profiler Home>/bin/linux-x86-32 a LD_LIBRARY_PATH
Linux AMD64, Java de 64 bits añada <!YourKit Java Profiler Home>/bin/linux-amd64 a LD_LIBRARY_PATH
Solaris SPARC, Java de 32 bits añadir <!YourKit Java Profiler Home>/bin/solaris-sparc-32 a LD_LIBRARY_PATH
Solaris SPARC, Java de 64 bits añadir <!YourKit Java Profiler Home>/bin/solaris-sparc-64 a LD_LIBRARY_PATH
Solaris x86, Java de 32 bits añadir <!YourKit Java Profiler Home>/bin/solaris-x86-32 a LD_LIBRARY_PATH
Solaris x86, Java de 64 bits (AMD64) añadir <!YourKit Java Profiler Home>/bin/solaris-x86-64 a LD_LIBRARY_PATH

Compruebe el agente de perfilado

Para comprobar que Java puede cargar el agente de perfilado, puede llamar al siguiente comando que imprime una descripción de los parámetros del agente:

  • Java 5 o 6
    • java -agentlib:yjpagent=help
  • Java 1.3 o 1.4
    • java -Xrunyjpagent:help

Integración de la biblioteca de agentes en la aplicación

Para poder perfilar una aplicación Java, es necesario proporcionar a la herramienta YourKit una interfaz con la aplicación Java. Debe integrar la biblioteca de agentes YourKit en la JVM donde se está ejecutando la aplicación de destino que desea perfilar. En primer lugar, habilite la creación de perfiles proporcionando la ruta a la biblioteca de agentes del sistema operativo correspondiente en la que se está ejecutando la JVM (consulte Habilitación de la creación de perfiles). Incluya variables de entorno de configuración en el script de inicio de la aplicación.

Por ejemplo, en un script de inicio CQ bajo Linux, haga lo siguiente:

#--------------------------------------------------------------------- #  enables the YourKit Java Profiler #--------------------------------------------------------------------- YJP_HOME="/home/honwai/yjp-6.0.16/bin/linux-x86-32" export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:$YJP_HOME

Esta configuración hace que la biblioteca de agentes esté disponible para la JVM. Ahora se trata de decirle a JVM que integre realmente esta librería, que difiere según la versión del JVM en uso:

Versión Java Opción JVM
1.3/1.4 java -Xrunyjpagent
5 o más reciente java -agentlib:yjpagent

Ahora está listo para iniciar su aplicación y la creación de perfiles. La biblioteca de agentes otorga cierta información en los resultados estándar (en el caso de CQ es server(logs/startup.log):

[YourKit Java Profiler 6.0.16] Uso de JVMPI (Linux; 32 bit JVM)

[YourKit Java Profiler 6.0.16] *** CONSEJO ***: Use Java 5 (o más reciente) cuando sea posible.

[YourKit Java Profiler 6.0.16] El agente de perfilado está escuchando en el puerto 10001...

Sugerencia: En CQ 4.2, el script serverctl se ha vuelto más avanzado, lo que permite ofrecer varias opciones al inicio. Incluye la opción de iniciar la JVM con la librería de agentes YourKit. La configuración de las variables de entorno descritas anteriormente sigue siendo obligatoria, pero la configuración de la opción adicional de JVM no lo es:

linuxbox:/opt/day/cq-4.2/server# ./start --profile

Para obtener una lista completa de las opciones disponibles, escriba ./serverctl y obtendrá una lista de todas las opciones disponibles.

Conexión del perfilador YourKit a la aplicación

Al iniciar una aplicación con la función de perfil habilitada, la biblioteca de agentes elige un puerto libre que está disponible en el sistema. No es necesario conocer el puerto. La herramienta YourKit puede conectarse automáticamente a una aplicación de perfil en ejecución, ya sea local o remotamente. Si encuentra más de una aplicación, se le pedirá que seleccione una en particular.

También es posible especificar un puerto dedicado si la configuración de seguridad local (por ejemplo, firewall) no permite elegir puertos arbitrarios. Consulte la siguiente tabla para obtener una lista completa de las opciones que se pueden pasar a la biblioteca del agente.

Opciones de biblioteca de agentes

Opción Descripción
disablealloc (Java 5 y versiones más recientes/JVMTI solamente) No instrumente bytecode con las instrucciones necesarias para la grabación de la asignación de objetos.
disablecounts (Java 5 y versiones más recientes/JVMTI solamente) No instrumente bytecode con las instrucciones necesarias para el rastreo de la CPU. Solo se dispone de muestreo de CPU.
disablej2ee (Java 5 y versiones más recientes/JVMTI solamente) No instrumente bytecode con las instrucciones necesarias para la creación de perfiles J2EE.
muestreo Inicie la aplicación Java con el muestreo de CPU activado. No tiene que perfilar la CPU desde el principio. En cambio, en muchos casos, es mejor iniciar o detener la medición más adelante desde la interfaz de usuario o utilizando la API Profiler.
rastreo Inicie la aplicación Java con el rastreo de CPU activado. No tiene que perfilar la CPU desde el principio. En cambio, en muchos casos, es mejor iniciar o detener la medición más adelante desde la interfaz de usuario o utilizando la API Profiler. Esta opción no se puede utilizar en combinación con disablecounts.
noj2ee No realice perfiles de alto nivel J2EE. Esta opción solo afecta a la creación de perfiles de CPU iniciada con “muestreo” o “rastreo”.
asignación Inicie la aplicación Java con la grabación de la asignación de objetos iniciada. Todos los objetos son registrados. No es necesario que registre las asignaciones desde el principio, sino que puede iniciar o detener la grabación más tarde desde el perfilador o utilizando la API de Profiler. Esta opción no se puede utilizar en combinación con disablealloc.
allocadaptive Inicie la aplicación Java con la grabación de la asignación de objetos iniciada. Se registran tantos objetos como sea posible, manteniendo la sobrecarga a un nivel moderado. No es necesario que registre las asignaciones desde el principio, sino que puede iniciar o detener la grabación más tarde desde el perfilador o utilizando la API de Profiler. Esta opción no se puede utilizar en combinación con disablealloc.
usedmem=<percent> Captura automática de instantáneas de memoria cuando la memoria acumulada utilizada alcanza el umbral.
onexit=memory Siempre captura la instantánea de la memoria al salir. La instantánea de la CPU se captura automáticamente si se habilita la creación de perfiles de CPU cuando se cierra la aplicación perfilada.
onexit=telemetry Captura instantánea de telemetría en el cierre. Esta opción se utiliza automáticamente cuando la aplicación perfilada se inicia desde el IDE.
port=<value> Especifique el puerto en el que el agente de perfilado escucha para la comunicación con el perfilador. De forma predeterminada se elige cualquier puerto libre.
onlylocal Permitir solo conexiones locales a la aplicación perfilada
dir=<directory for="for" snapshots="snapshots"> Especifique el directorio donde se crean las instantáneas. De forma predeterminada, se utiliza el directorio <user home="home">/Snapshots.
quiet Suprima los mensajes de diagnóstico que el agente de perfilado imprime en la consola.
help Imprima una breve descripción de los parámetros del agente.

Separe las opciones múltiples con comas. Preste atención a que Java requiere :después -Xrunyjpagent pero = después -agentlib:yjpagent.

Ejemplos (Java 5 o versiones más recientes):

java -agentlib:yjpagent FooClass java -agentlib:yjpagent=onexit=memory,dir=c:\MySnapshots FooClass java -agentlib:yjpagent=usedmem=70 FooClass

Ejemplos (Java 1.3/1.4):

java -Xrunyjpagent FooClass java -Xrunyjpagent:onexit=memory,dir=c:\MySnapshots FooClass java -Xrunyjpagent:usedmem=70 FooClass

Documentación

Una vez que se instala el perfilador YourKit, hay una extensa documentación HTML en el directorio de instalación, en <!YourKit Java Profiler Home>/docs/help/index.html. Explica en detalle cómo integrar la biblioteca de agentes en la aplicación de destino que es objeto de la creación de perfiles. También proporciona muchas opciones útiles que se pueden pasar al agente. Por ejemplo:

  • la generación de un volcado de memoria una vez que la aplicación se cierra
  • generar un volcado de memoria una vez que se alcanza un determinado umbral

Estas opciones se encuentran en <!YourKit Java Profiler Home>/docs/help/agent.html.

La versión actual 7.0 no viene con documentación, puede encontrarla en nuestro servidor de configuración:

  • \\setup\install\profiling\yjp-6.0\docs\help\index.html