Problema

Come si configura il profiler Java YourKit per l'utilizzo con CQ3.x o CQ4.x?

Soluzione

Installa YourKit

  1. Scarica l'agente YourKit per il tuo sistema operativo (vedi i link in fondo alla pagina).

  2. Installa il profiler YourKit.

  3. Avvia il profiler YourKit (per eseguire il profiler è necessario JDK 1.5).

    • Windows: Avvia "YourKit Java Profiler" dal menu Start.
    • Linux, Solaris: Esegui YourKit Java Profiler Home > /bin/yjp.sh.
    • Mac OS X: Dopo aver aperto l'applicazione scaricata, fai clic sulla sua icona.

Abilita il profiling

È possibile abilitare il profiling direttamente in un server IDE o anche J2EE. Tuttavia, è preferibile abilitare il profiling manuale per essere indipendente dai server IDE o J2EE. La procedura varia a seconda del sistema operativo.

SO Azione
Windows, Java a 32 bit aggiungi <!YourKit Java Profiler Home>\bin\win32 al PERCORSO
Windows, Java a 64 bit aggiungi <!YourKit Java Profiler Home>\bin\win-amd64 al PERCORSO
Mac OS X aggiungi <!YourKit Java Profiler Home>/bin/mac al DYLD_LIBRARY_PATH
Linux x86, Java a 32 bit aggiungi <!YourKit Java Profiler Home>/bin/linux-x86-32 a LD_LIBRARY_PATH
Linux AMD64, Java a 64 bit aggiungi <!YourKit Java Profiler Home>/bin/linux-amd64 a LD_LIBRARY_PATH
Solaris SPARC, Java a 32 bit aggiungi <!YourKit Java Profiler Home>/bin/solaris-sparc-32 a LD_LIBRARY_PATH
Solaris SPARC, Java a 64 bit aggiungi <!YourKit Java Profiler Home>/bin/solaris-sparc-64 a LD_LIBRARY_PATH
Solaris x86, Java a 32 bit aggiungi <!YourKit Java Profiler Home>/bin/solaris-x86-32 a LD_LIBRARY_PATH
Solaris x86, Java a 64 bit (AMD64) aggiungi <!YourKit Java Profiler Home>/bin/solaris-x86-64 a LD_LIBRARY_PATH

Controlla l'agente del profiler

Per verificare che Java possa caricare l'agente del profiler, puoi richiamare il seguente comando che stampa una descrizione dei parametri dell'agente:

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

Integra la libreria dell'agente nell'applicazione

Per eseguire il profiling di un'applicazione Java, è necessario fornire allo strumento YourKit un'interfaccia all'applicazione Java. Integra la libreria dell'agente YourKit nella JVM dove è in esecuzione l'applicazione target di cui desideri eseguire il profiling. In primo luogo, abilita il profiling fornendo il percorso della libreria dell'agente del sistema operativo rispettivo su cui è in esecuzione la JVM (vedi Abilitazione del profiling). Includi l'impostazione delle variabili d'ambiente nello script iniziale dell'applicazione.

Per esempio, in uno script di avvio CQ in Linux, procedi come segue:

#--------------------------------------------------------------------- # 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

Questa impostazione mette a disposizione della JVM la libreria dell'agente. Ora si tratta di comunicare alla JVM di integrare effettivamente questa libreria, che differisce a seconda della versione di JVM in uso:

Versione Java Opzione JVM
1.3/1.4 java -Xrunyjpagent
5 o più recente java -agentlib:yjpagent

Ora puoi iniziare la tua applicazione e il profiling vero e proprio. La libreria dell'agente stampa alcune informazioni sull'output standard (nel caso di CQ è server(logs/startup.log):

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

[YourKit Java Profiler 6.0.16] *** SUGGERIMENTO ***: Usa Java 5 (or più recenti) se possibile!

[YourKit Java Profiler 6.0.16] L'agente del profiler è in ascolto sulla porta 10001...

Suggerimento: In CQ 4.2, lo script serverctl è diventato più avanzato, permettendo di fornire varie opzioni all'avvio. Include l'opzione per avviare la JVM con la libreria dell'agente YourKit. L'impostazione delle variabili env sopra descritte è ancora obbligatoria, ma l'impostazione dell'opzione aggiuntiva JVM non lo è:

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

Per ottenere un elenco completo delle opzioni disponibili, digita ./serverctl e otterrai un elenco di tutte le opzioni disponibili.

Connessione all'applicazione con il profiler YourKit

Quando si avvia un'applicazione con il profiler abilitato, la libreria agente sceglie una porta libera disponibile sul sistema. Non è necessario conoscere la porta. Lo strumento YourKit può connettersi automaticamente a un'applicazione in esecuzione di cui hai eseguito il profiling, sia localmente che da remoto. Se trova più di un'applicazione, ti viene richiesto di selezionarne una.

È anche possibile specificare una porta dedicata se le impostazioni di sicurezza locali (ad esempio, un firewall) non consentono di scegliere porte arbitrarie. Vedi la seguente tabella per un elenco completo delle opzioni che possono essere passate alla libreria dell'agente.

Opzioni della libreria dell'agente

Opzione Descrizione
disablealloc (solo Java 5 e versioni successive / JVMTI) Non dotare bytecode delle istruzioni necessarie per la registrazione dell'assegnazione degli oggetti.
disablecounts (solo Java 5 e versioni successive / JVMTI) Non dotare bytecode delle istruzioni necessarie per il tracciamento della CPU. È disponibile solo il campionamento della CPU.
disablej2ee (solo Java 5 e versioni successive / JVMTI) Non dotare bytecode delle istruzioni necessarie per il profiling J2EE.
campionamento Avvia l'applicazione Java con il campionamento della CPU attivato. Non è necessario eseguire il profiling della CPU fin dall'inizio. In molti casi, invece, è preferibile avviare o interrompere la misurazione in seguito dall'interfaccia utente o utilizzando API Profiler.
tracciamento Avvia l'applicazione Java con il tracciamento della CPU attivato. Non è necessario eseguire il profiling della CPU fin dall'inizio. In molti casi, invece, è preferibile avviare o interrompere la misurazione in seguito dall'interfaccia utente o utilizzando API Profiler. Questa opzione non può essere utilizzata insieme a 'disablecounts'.
noj2ee Non eseguire il profiling di alto livello J2EE. Questa opzione influisce solo sul profiling della CPU avviato con il 'campionamento' o 'tracciamento'.
alloc Avvia l'applicazione Java con la registrazione della distribuzione degli oggetti avviata. Tutti gli oggetti sono registrati. Non è necessario registrare le distribuzioni fin dall'inizio; invece, è possibile avviare o interrompere la registrazione in un secondo momento dal Profiler o usando l'API Profiler. Questa opzione non può essere utilizzata in combinazione con 'disablealloc'.
allocadaptive Avvia l'applicazione Java con la registrazione della distribuzione degli oggetti avviata. Viene registrato il maggior numero di oggetti possibile, mantenendo il limite a un livello moderato. Non è necessario registrare le distribuzioni fin dall'inizio; invece, è possibile avviare o interrompere la registrazione in un secondo momento dal Profiler o usando l'API Profiler. Questa opzione non può essere utilizzata in combinazione con 'disablealloc'.
usedmem=<percent> Cattura automaticamente l'istantanea della memoria quando la memoria heap in uso raggiunge la soglia.
onexit=memory Cattura sempre l'istantanea della memoria al momento dell'uscita. L'istantanea della CPU viene catturata automaticamente se il profiling della CPU è abilitato quando l'applicazione di cui si esegue il profiling esce.
onexit=telemetry Cattura l'istantanea della telemetria al momento dell'uscita. Questa opzione viene utilizzata automaticamente quando l'applicazione di cui si esegue il profiling viene avviata dall'IDE.
port=<value> Specifica la porta che l'agente del profiler ascolta per la comunicazione con il profiler. Per impostazione predefinita, viene scelta una qualsiasi porta libera.
onlylocal Consenti solo connessioni locali all'applicazioni di cui si è eseguito il profiling
dir=<directory for="for" snapshots="snapshots"> Specifica la directory in cui vengono create le istantanee. Per impostazione predefinita, viene utilizzata la directory <user home="home">/Snapshots
quiet Silenzia i messaggi di diagnostica che l'agente del profiler stampa sulla console.
help Stampa una breve descrizione dei parametri dell'agente.

Separa le varie opzioni con delle virgole. Attenzione, Java richiede : after -Xrunyjpagent but = after -agentlib:yjpagent.

Esempi (Java 5 o successivi):

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

Esempi (Java 1.3/1.4):

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

Documentazione

Una volta installato il profiler YourKit, un'ampia documentazione HTML è presente nella directory di installazione, in <!YourKit Java Profiler Home>/docs/help/index.html. Spiega in dettaglio come integrare la libreria dell'agente sull'applicazione target oggetto del profiling. Fornisce anche molte opzioni utili che possono essere passate all'agente. Ad esempio:

  • genera un heap-dump una volta che l'applicazione esce
  • genera un heap-dump una volta che una certa soglia è stata raggiunta

Queste opzioni si trovano in <!YourKit Java Profiler Home>/docs/help/agent.html.

L'attuale versione 7.0 non viene fornita con la documentazione, puoi trovarla sul nostro server di installazione:

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

Questo prodotto è concesso in licenza in base alla licenza di Attribuzione-Non commerciale-Condividi allo stesso modo 3.0 Unported di Creative Commons.  I post su Twitter™ e Facebook non sono coperti dai termini di Creative Commons.

Note legali   |   Informativa sulla privacy online