Problem

Wie konfiguriere ich YourKit Java Profiler, um mit CQ3.x oder CQ4.x arbeiten zu können?

Lösung

YourKit installieren

  1. Laden Sie YourKit für Ihr Betriebssystem herunter (siehe Links unten auf der Seite).

  2. Installieren Sie YourKit Profiler.

  3. Starten Sie YourKit Profiler (JDK 1.5 ist erforderlich, um den Profiler auszuführen).

    • Windows: Starten Sie YourKit Java Profiler aus dem Startmenü heraus.
    • Linux, Solaris: Führen Sie YourKit Java Profiler Home > /bin/yjp.sh aus.
    • Mac OS X: Wenn die heruntergeladene Anwendung entpackt ist, klicken Sie auf das zugehörige Symbol.

Profiling aktivieren

Es ist möglich, Profiling direkt in einem IDE- oder sogar J2EE-Server zu aktivieren. Oftmals ist es jedoch besser, Profiling manuell zu aktivieren, um unabhängig von IDE- oder J2EE-Servern zu sein. Das Verfahren unterscheidet sich von OS zu OS.

Betriebssystem Aktion
Windows 32-Bit Java Fügen Sie dem Pfad <!YourKit Java Profiler Home>\bin\win32 hinzu
Windows 64-Bit Java Fügen Sie <!YourKit Java Profiler Home>\bin\win-amd64 in den Pfad ein.
Mac OS X Fügen Sie <!YourKit Java Profiler Home>/bin/mac in den Pfad DYLD_LIBRARY_PATH ein.
Linux x86, 32-Bit Java Fügen Sie <!YourKit Java Profiler Home>/bin/linux-x86-32 in den Pfad LD_LIBRARY_PATH ein.
Linux AMD64, 64-Bit Java Fügen Sie <!YourKit Java Profiler Home>/bin/linux-amd64 in den Pfad LD_LIBRARY_PATH ein.
Solaris SPARC, 32-Bit Java Fügen Sie in den Pfad LD_LIBRARY_PATH <!YourKit Java Profiler Home>/bin/solaris-sparc-32 ein.
Solaris SPARC, 64-Bit Java Fügen Sie <!YourKit Java Profiler Home>/bin/solaris-sparc-64 in den Pfad LD_LIBRARY_PATH ein.
Solaris x86, 32-Bit Java Fügen Sie <!YourKit Java Profiler Home>/bin/solaris-x86-32 in den Pfad LD_LIBRARY_PATH ein.
Solaris x86, 64-Bit Java (AMD64) Fügen Sie <!YourKit Java Profiler Home>/bin/solaris-x86-64 in den Pfad LD_LIBRARY_PATH ein.

Überprüfen Sie den Profiler

Um zu überprüfen, ob Java den Profiler Agent laden kann, können Sie folgenden Befehl aufrufen, der eine Beschreibung der Agent-Parameter druckt:

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

Agent-Bibliothek in Anwendung integrieren

Um eine Java-Anwendung zu profilen, muss YourKit eine Schnittstelle zur Java-Anwendung bereitgestellt werden. Sie integrieren die YourKit Agent-Bibliothek in die JVM, in der die zu profilierende Zielanwendung ausgeführt wird. Aktivieren Sie zunächst das Profiling, indem Sie den Pfad zur entsprechenden OS-Agent-Bibliothek angeben, auf der die JVM ausgeführt wird (siehe Aktivieren von Profiling). Setzen Sie im Startskript Ihrer Anwendung Umgebungsvariablen fest.

Beispiel: Nehmen Sie in einem CQ-Startskript unter Linux folgende Einstellungen vor:

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

Diese Einstellung stellt die Agent-Bibliothek für die JVM zur Verfügung. Jetzt gilt es nur noch, der JVM mitzuteilen, diese Bibliothek zu integrieren. Dies ist je nach verwendeter JVM-Version unterschiedlich:

Java-Version JVM-Option
1.3/1.4 Java-Xrunyjpagent
5 oder höher java -agentlib:yjpagent

Nun können Sie Ihre Anwendung und das eigentliche Profiling starten. Die Agent-Bibliothek druckt einige Informationen in die Standardausgabe (im Falle von CQ ist es Server(logs/startup.log):

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

[YourKit Java Profiler 6.0.16] *** HINT ***: Use Java 5 (or newer) when possible!

[YourKit Java Profiler 6.0.16] Profiler agent is listening on port 10001...

Hinweis: In CQ4.2 ist das serverctl-Skript jetzt erweitert geworden und erlaubt es, beim Start verschiedenen Optionen bereitzustellen. Es enthält die Option zum Starten der JVM mit der YourKit Agent-Bibliothek. Das Festlegen der oben beschriebenen Umgebungsvariablen ist zwar immer noch erforderlich, aber das Festlegen der zusätzlichen JVM-Option ist es nicht:

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

Um eine vollständige Liste der verfügbaren Optionen anzuzeigen, geben Sie ein:/serverctl und Sie erhalten eine Liste aller verfügbaren Optionen.

Verbindung zur Anwendung mit YourKit Profiler

Wenn eine Anwendung mit aktiviertem Profiling gestartet wird, wählt die Agent-Bibliothek einen freien Anschluss, der auf dem System verfügbar ist. Der Port muss nicht bekannt sein. YourKit kann automatisch eine Verbindung zu einer laufenden analysierten Anwendung herstellen; entweder lokal oder remote. Wenn mehr als eine Anwendung gefunden wird, werden Sie aufgefordert, eine bestimmte Anwendung auszuwählen.

Es ist auch möglich, einen dedizierten Port anzugeben, wenn lokale Sicherheitseinstellungen (z. B. eine Firewall) keine Wahl willkürlicher Ports zulassen. In der folgenden Tabelle finden Sie eine vollständige Liste der Optionen, die an die Agent-Bibliothek übergeben werden können.

Optionen für die Agent-Bibliothek

Option Beschreibung
disablealloc (Java 5 und neuere / nur JVMTI) Instrumentieren Sie keinen Bytecode mit Anweisungen, die für die Protokollierung der Objektzuordnung benötigt werden.
disablecounts (Java 5 und neuere / nur JVMTI) Instrumentieren Sie keinen Bytecode mit Anweisungen, die für die CPU-Verfolgung benötigt werden. Nur CPU-Abtastung ist verfügbar.
disablej2ee (Java 5 und neuere / nur JVMTI) Geben Sie keinen Bytecode ein mit Anweisungen, die für das J2EE-Profiling benötigt werden.
Sampling Starten Sie die Java-Anwendung mit aktivierter CPU-Abtastung. Sie müssen das CPU-Profiling nicht direkt von Anfang an durchführen. In vielen Fällen ist es sinnvoller, die Messung später über die Benutzeroberfläche oder mithilfe von Profiler API zu starten oder zu beenden.
Tracing Starten Sie die Java-Anwendung mit aktivierter CPU-Ablaufverfolgung. Sie müssen das CPU-Profiling nicht direkt von Anfang an durchführen. In vielen Fällen ist es sinnvoller, die Messung zu einem späteren Zeitpunkt über die Benutzeroberfläche oder mithilfe der Profiler API zu starten oder zu beenden. Diese Option kann nicht mit 'disablecounts' kombiniert werden.
noj2ee Führen Sie kein J2EE-High-Level-Profiling durch. Diese Option wirkt sich nur auf CPU-Profilings aus, die mit „Abtastung“ oder „Ablaufverfolgung“ gestartet wurden.
alloc Starten Sie die Java-Anwendung mit gestarteter Objektzuordnungsaufzeichnung. Alle Objekte werden aufgezeichnet. Sie müssen die Zuordnungen nicht direkt von Anfang an aufzeichnen. Stattdessen können Sie die Aufzeichnung später vom Profiler oder mithilfe von Profiler API starten oder beenden. Diese Option kann nicht mit 'disablealloc' kombiniert werden.
allocadaptive Starten Sie die Java-Anwendung mit gestarteter Objektzuordnungsaufzeichnung. Während so viele Objekte wie möglich aufgezeichnet werden, bleibt der Overhead auf moderater Ebene. Sie müssen die Zuordnungen nicht direkt von Anfang an aufzeichnen. Stattdessen können Sie die Aufzeichnung später vom Profiler oder mithilfe von Profiler API starten oder beenden. Diese Option kann nicht mit 'disablealloc' kombiniert werden.
usedmem=<percent> Automatisch Speicherabzug anfertigen, wenn der genutzte Heapspeicher den Schwellenwert erreicht.
onexit=memory Immer beim Beenden einen Speicherabzug anfertigen. CPU-Speicherabzug wird automatisch angefertigt, wenn CPU-Profiling beim Beenden der profilierten Anwendung aktiviert ist.
onexit=telemetry Beim Beenden Telemetrieabzug aufnehmen. Diese Option wird automatisch verwendet, wenn die profilierte Anwendung aus der IDE gestartet wird.
port=<value> Geben Sie den Port an, auf dem der Profiler Agent die Kommunikation mit dem Profiler überwacht. Standardmäßig wird jeder freie Anschluss ausgewählt.
onlylocal Nur lokale Verbindungen mit profilierter Anwendung zulassen
dir=<directory for="for" snapshots="snapshots"> Geben Sie den Ordner an, in dem Abzüge erstellt werden. Standardmäßig wird <user home="home">/Snapshots directory verwendet.
quiet Unterdrücken Sie Diagnosemeldungen, die der Profiler-Agent in die Konsole druckt.
help Druckt eine kurze Beschreibung der Agent-Parameter.

Trennt mehrere Optionen durch Kommas. Achten Sie darauf, dass Java : nach „-Xrunyjpagent“ benötigt, jedoch = nach „agentlib:yjpagent“.

Beispiele (Java 5 oder höher):

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

Beispiele (Java 1.3/1.4):

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

Dokumentation

Sobald der YourKit-Profiler installiert ist, gibt es eine umfassende HTML-Dokumentation im Installationsverzeichnis, in „<!YourKit Java Profiler Home>/docs/help/index.html“. Diese erklärt detailliert, wie die Agent-Bibliothek in die Zielanwendung integriert wird, die das Subjekt des Profilings ist. Sie bietet außerdem zahlreiche nützliche Optionen, die an den Agenten übergeben werden können. Beispiel:

  • Erzeugen einer Stapel-Sicherheitskopie, sobald die Anwendung beendet ist
  • Erzeugen einer Stapel-Sicherheitskopie, sobald ein bestimmter Grenzwert erreicht ist

Diese Optionen finden Sie in „<!YourKit Java Profiler Home>/docs/help/agent.html“.

Die aktuelle 7.0-Version kommt ohne Dokumentation, Sie können dieser in unserem Setup-Server finden:

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

Dieses Werk unterliegt den Bedingungen der Creative Commons Attribution-Noncommercial-Share Alike 3.0 Unported License.  Twitter™- und Facebook-Beiträge fallen nicht unter die Bedingungen der Creative Commons-Lizenz.

Rechtliche Hinweise   |   Online-Datenschutzrichtlinie