Name

HPROF

Homepage

http://java.sun.com/developer/technicalArticles/Programming/HPROF.html

Lizenz

HPROF: GNU General Public License
HPJMeter: Commercial

Untersuchte Version

HPROF: integriert in Java Version 5.0
HPJMeter: 3.1.0.00

Letzter Untersuchungszeitpunkt

05.12.2010

Kurzbeschreibung

HPROF ist ein kleines Profiling-Tool, das seit der Version 5.0 fest in Java integriert ist.
Das Tool wird zusammen mit dem zu testenden Java-Programm über die Kommandozeile gestartet. Anhand von Optionsparametern können zusätzlich die Bereiche festgelegt werden, auf welche während des Profilingvorgangs reagiert werden soll. Wird das Java-Programm beendet, erzeugt HPROF eine Textdatei, in welcher alle wahrgenommenen Ereignisse gespeichert werden.
Diese kann mit jedem beliebigen Editor betrachtet werden.
Für eine graphische Darstellung der Aufzeichnungen ist das Tool HPjmeter hilfreich, welches die erzeugte Datei einlesen und interpretieren kann.

Fazit

HPROF ist ein kleines und leicht zu handhabendes Tool, welches gut für den schnellen Einsatz geeignet ist. Da HPROF lediglich per Parameterübergabe gestartet und konfiguriert werden kann, ist es recht unflexibel. Um Einstellungen zu ändern muss das zu profilende Programm also jedes mal neu gestartet werden.
Zudem hat das Ergebnis die sehr schlichte Form einer einfachen Text-Datei. Dieser Aspekt macht das Analysieren mühsam und umständlich.
Dafür kommt HPjmeter zum Einsatz, dessen Oberfläche selbsterklärend und leicht bedienbar ist. Es visualisiert die von HPjmeter aufgezeichneten Daten und gibt diese grafisch und besser verständlich aus. Jedoch ließen sich nur Dateien einlesen, welche durch HPROF mit einem Heap Dump erzeugt wurden. Ansonsten hat HPjmeter den Ladevorgang mit einer Fehlermeldung abgebrochen.

Einsatzgebiete

HPROF ist für ein schnelles Profiling von Java-Programmen geeignet, aber keine professionelle Lösung für einen dauerhaften Einsatz.

Einsatzumgebungen

HPROF ist ein in Java integriertes Profiling-Tool, das mit dem Start des zu profilenden Programms auf der Kommandozeile ausgeführt wird. Demnach bietet es die Möglichkeit, in kompilierter Form vorliegende Java-Programme in ihrer Ausführung zu analysieren.
Das Standalone-Programm HPjmeter muss explizit von der HP-Seite heruntergeladen werden (siehe Abschnitt "Installation") und dient einer besseren Darstellung der Testergebnisse.

Installation

HPROF ist seit der Version 5.0 fest in Java integriert und muss nicht nachinstalliert werden.
Das Tool kann mit zwei unterschiedlichen Befehlen gestartet werden:

HPjmeter kann über die offizielle HP-Seite in verschiedenen Formaten heruntergeladen werden.
Mittels der verfügbaren .jar Datei lässt sich das Programm mit dem Befehl java -jar HPjmeter.jar in der Kommandozeile starten.

Dokumentation

Auf der offiziellen Java Sun Seite gibt es ein knappes, aber gut verständliches Tutorial.
Zudem existieren mehrere Tutorials im Internet, auch in Zusammenhang mit HPjmeter:

Eine ausführliche Dokumentation zu HPjmeter ist hier zu finden.

Wartung der Projektseite

Die Projektseite von HPROF besteht nur aus einer einzelnen Seite. Diese wurde zuletzt am 18.11.2004 aktualisiert.
Die Produktseite von HPjmeter wurde zuletzt im Juni 2008 erneuert.

Nutzergruppen und Support

Es wurden weder Nutzergruppen noch Support gefunden.

Intuitive Nutzbarkeit

Da HPROF per Kommandozeile konfiguriert wird, müssen Optionsparameter übergeben werden.
Diese können samt Tutorial hier gefunden werden.
HPjmeter ist sehr intuitiv gestaltet, jedoch konnten einzig HPROF-Dateien eingelesen werden, die mittels hprof=heap=dump erzeugt wurden.

Automatisierung

Es wurde keine Möglichkeit gefunden HPROF oder HPjmeter zu automatisieren.

ANT
Die Automatisierung des Thread-Verhaltens mittels HProf-Dateien ist mit Hilfe von Ant möglich. Damit das Programm auch automatisiert abläuft, müssen benötigte Eingabendaten automatisch eingegeben werden. Zur Ausführung werden keine externen Bibliotheken benötigt, da es sich bei den HProf-Dateien um ein Feature von Java handelt. Beim Aufruf der Applikation muss jediglich der JVM der folgende Parameter übergeben werden: -agentlib:hprof=heap=dump. Dieser Parameter bezweckt, dass eine Datei namens java.hprof.txt im aktuellen Basisverzeichnis angelegt wird. Diese Datei beinhaltet alle gesammelten Informationen und liegt in Klartext vor. Zur Analyse dieser Datei kann, wie weiter oben beschrieben, das Programm HPjmeter verwendet werden.
Eine Beispielautomatisierung ist hier zu finden.
Maven
Unter dem ANT-Abschnitt wurde kurz erläutert, dass die Ausführung zur Erstellung der hprof-Dateien ein Feature von Java ist. Dazu muss lediglich der JVM das Argument -agentlib:hprof=heap=dump übergeben werden. In Maven allerdings gestaltet sich ein Konsolenaufruf mit Übergabe eines JVM-Arguments schwierig. Die Ausführung von Programmen kann über das externe Plugin von codehaus angestoßen werden. Allerdings unterstützt dieses keine Übergabe von Argumenten an die JVM. Zudem wurde auch kein externes Plugin zur Erzeugung von hprof-Dateien im Maven-Repository gefunden.
Somit ist eine automatische Erzeugung der hprof-Dateien nicht ohne weiteres mit Maven möglich.

Einführendes Beispiel

Benötigte Ressourcen: In diesem kleinen Tutorial wird die Funktionsweise des integrierten Javaprofilers "HPROF" und des Standalone-Tools "HPjmeter" von HP erläutert, wobei HPjmeter lediglich zum Anzeigen der von HPROF erzeugten Dateien verwendet wird und nicht zum Profilen selbst.

Das Polygon-Testprogramm ist bereits vorkompiliert und muss lediglich noch zusammen mit HPROF gestartet werden. Dazu wird in der Kommandozeile in das Verzeichnis Polygon/bin gewechselt.
Die allgemeine Syntax zur Nutzung von HPROF gestaltet sich wie folgt:

java -agentlib:hprof[=options] ToBeProfiledClass

In diesem Beispiel sollte der Befehl wie folgt aussehen:

java -agentlib:hprof=heap=dump de.fhwiesbaden.poly.PolygonGUI

Anmerkung: Dateien die nicht mit der Option hprof=heap=dump erzeugt worden sind, konnten nicht in HPjmeter importiert werden. Es kam jedes Mal zu einer Fehlermeldung.

Mittels -agentlib:hprof=heap=dump wird angegeben welche Aspekte mitgeschnitten und in die Auswertungsdatei geschrieben werden sollen. In diesem Fall ist es ein kompletter Heap Dump.
Es besteht auch die Möglichkeit das Programm nicht per -agentlib sondern per -Xrunhprof" zu starten, jedoch soll diese Schnittstelle laut Projektseite zukünftig wieder entfernt werden.

Eine komplette Liste der Parameter kann hier gefunden werden.

Um ausreichend Analysedaten zu erhalten, sollte im Polygon-Programm der voreingerichtete <<Hardcore-Test>> ausgeführt werden. Damit HPROF die gesammelten Werte in eine Datei speichert muss das Programm beendet werden, alternativ lässt sich dieser Mechanismus auch mit STRG+\ starten. Die Datei wird innerhalb des bin-Ordners generiert und lässt sich mit jedem beliebigen Texteditor untersuchen:

hprof_file

Dies ist ein kleiner Ausschnitt der erstellten Datei mit Informationen über Threads und den Stack Trace.

Um eine bessere Darstellung der erzeugten Informationen zu erhalten, wird in diesem Beispiel das bereits erwähnte HPjmeter verwendet. Dazu muss einfach die HPjmeter.jar Datei ausgeführt werden:

java -jar HPjmeter.jar

hpjmeter_greeting
In dem Bereich unter der Menüleiste ist die History der schon einmal verwendeten Dateien zu sehen.
Es sind einige wenige visuelle Einstellmöglichkeiten unter dem Menüpunkt "Edit" abrufbar, Hilfestellungen sind unter dem Menüpunkt "Help" verfügbar. Mittels "File" -> "Open File" lassen sich von HPROF generierte Dateien laden:
hpjmeter_opened
Neben allgemeinen Informationen, wie z.B. Name der Applikation oder Zeitpunkt der Ausführung, lassen sich auch Informationen in punkto Threads oder eventuelle Memory Leaks aufrufen:
hpjmeter_analysis
Zum Auffinden von Memory Leaks ist zudem die Anzeige der "Live Objects" sehr hilfreich. Hierbei wird die Anzahl der erzeugten Objekte und die Prozentsumme aller Objekte diesen Typs angezeigt.
In diesem Beispiel werden viele Punkte eines Polygons erstellt, die in Pair-Objekten gespeichert werden. Es ist auf Anhieb ersichtlich, dass diese Objekte sehr viel Speicher verbrauchen und damit einen konkreten Punkt für eine Programmoptimierung darstellen:
hpjmeter_liveObjects
Es sind jedoch nicht immer alle Informationen abrufbar. Jenachdem welche Parameter HPROF mitgegeben wurden, sind bestimmte Optionen ausgegraut. Über "Help" -> "Profling Options" ist eine übersichtliche Tabelle verfügbar, in welcher die einzelnen Parameter und die daraus ablesbaren Informationen aufgelistet sind:
hpjmeter_propt

Detaillierte Beschreibung

Literatur

Keine gefunden.



Zurück zur Werkzeugübersicht
Zurück zur CSI-Hauptseite