24.11.2010
JRat ist ein einfach zu handhabendes Tool zur Laufzeitanalyse von beliebigen Java-Programmen.
JRat ist ein einfach zu handhabendes Tool und sehr praktisch für einen schnellen und unkomplizierten Einsatz.
Es ist keine aufwändige Installation nötig. Die Dokumentation ist zwar sehr knapp gehalten, ist aber im Fall von JRat völlig
ausreichend.
Da das Tool im Funktionsumfang relativ eingeschränkt ist, bietet es kaum Möglichkeiten für flexible Anpassungen.
Die Aktualität des Projektes lässt etwas zu wünschen übrig. Regelmäßige Updates und ein mühevoller
gehaltenes Forum wären sicher wünschenswert.
Laufzeitanalyse von Java-Programmen.
JRat ist plattformunabhängig in jeder javafähigen Laufzeitumgebung (ab v1.4) anwendbar, da es selbst komplett auf Java basiert.
Die aktuelle Version von JRat kann über die auf der Projekt-Homepage angegebene
URL
heruntergeladen werden.
Anschließend kann die zip-Datei in einen beliebigen Ordner entpackt werden. Der Ordner beinhaltet lediglich eine mit einer
Java Runtime startbare Datei shiftone-jrat.jar
und einen Ordner docs
, welcher eine Offline-Dokumentation
im HTML-Format enthält.
Die Tool-Oberfläche kann daraufhin z.B. über den Befehl java -jar shiftone-jrat.jar
gestartet werden.
Eine Offline-Dokumentation im HTML-Format ist im Programm-Download enthalten und auch über die GUI einsehbar.
Die selben Informationen sind ebenfalls auf der Projekt-Homepage zu finden,
sowie ein Web Start Demo, welche das Tool startet und lediglich eine
fertige .jrat
-Datei zur Ansicht lädt.
Die relativ übersichtliche Webseite ist klar strukturiert, enthält aber recht wenig Detailinformationen.
Im Download-Bereich ist allerdings zu sehen, dass zwischen Version 0.71b und 1-alpha2 fast
zweieinhalb Jahre vergangen sind und die erste
beta-Version 1-beta1 noch ein Jahr länger auf sich warten ließ. Diese zur Untersuchung genutzte Version
wurde seit drei Jahren nicht aktualisiert, so dass die Vermutung nahe liegt, dass die Entwicklung eingestellt wurde.
Es existiert ein Forum, auf welchem einige Einträge zu finden sind, die jedoch seltener, bzw. seit einem Jahr gar nicht beantwortet werden.
JRat ist sehr einfach zu benutzen und lässt sich ohne Probleme trotz knapper Benutzeranleitung leicht einsetzen. Auch die vom Tool erzeugten Ergebnisse sind gut zu verstehen.
JRat bietet von Haus aus keine spezielle Automatisierungsunterstützung. Jedoch lässt sich ein Laufzeittest einfach mit der
JavaVM-Option -javaagent
starten. So kann diese Erweiterung z.B. in der Entwicklungsumgebung Eclipse
in den JavaVM-Einstellungen fest eintragen werden, so dass die Testroutine bei jeder Programmausführung automatisch gestartet wird.
-javaagent
erweitert werden. Die Analyse und Darstellung der Ergebnisse muss
dabei weiterhin über die JRat Software geschehen. Zwar entstehen durch die Tests auch zwei lesbare
Formate (jrat.log und memory.csv), allerdings enthalten diese nicht die gewünschten Informationen. Diese
befinden sich in der Datei my_code_tree.jrat. Diese Datei kann mittels der JRat-Software analysiert werden.
Ant unterstützt in diesem Szenario die automatisierte Ausführung des Laufzeitstests.
Um mit JRat eine Laufzeitanalyse durchzuführen, ist es lediglich notwendig der JavaVM mit dem zusätzlichen Parameter -javaagent:..
mitzuteilen, dass JRat die vom Agent abgefangenen Meldungen mithören kann.
Auf der Konsole wird die Laufzeitanalyse mit folgender Zeile gestartet:
z.B.:
java -javaagent:path/to/shiftone-jrat.jar [java options] [main class]
shiftone-jrat.jar
wird hierzu zunächst in das bin-Verzeichnis
des Projektes "Polygon" kopiert.
Von hier aus wird dann das Programm mit im Hintergrund laufender Laufzeitanalyse gestartet:
java -javaagent:shiftone-jrat.jar de.fhwiesbaden.poly.PolygonGUI
jrat.output
2009-01-05_PM-04-00-40
jrat.log
memory.csv
jrat.xml
Die Dateien mit dem Format .log
bzw. .csv
werden bei jedem gefangenen Event aktualisiert.
2009-01-05_PM-04-00-40
zusätzlich die Datei my_code_tree.jrat
angelegt. Diese ist offensichtlich eine für JRat generierte Datei, welche die Informationen aus der vorhanden Log- bzw. CSV-Datei
vereint und für das Tool lesbar macht.
java -Xmx256M -jar shiftone-jrat.jar
gestartet werden.-Xmx256MB
ruft hierbei eine Beschränkung des maximal zu verwendenden Arbeitsspeichers von 256 MB hervor).
.jrat
-Datei geöffnet
werden.Die Methode "paintComponent()" aus der Klasse "PolygonPunkt" war z.B. insgesamt 1,555 Sekunden aktiv und hatte damit mit 42,8 % den höchsten Anteil an Prozessorzeit während der Programmausführung.
Hier können die einzelnen Methoden ausgewählt werden. Im unteren Fensterbereich werden dann die zugehörigen Laufzeitinformationen wie auch in der "Summary"-Ansicht ausgegeben.
Hier ist zusätzlich der Hierarchiebaum der Pakete zu sehen. Würde das Programm aus mehreren Paketen bestehen, könnten hier u.a. zusätzlich die absoluten und prozentualen Anteile an der gesamten Programmlaufzeit ermittelt werden.
Eine funktionelle Beschreibung ist hier zu finden:
Diese erkärt, mit welcher Arbeitsweise JRat durch injizierten Code das Original-Programm erweitert, um sie dem Java-Agent
sichtbar zu machen. Hierbei wird nicht der Quellcode geändert, sondern der Bytecode, so dass die .class
-Dateien
die Informationen beinhalten.
Eine einfache Methode "MyClass"
public class MyClass {
public Object doSomething() {
// do something
}
}
wird wie folgt ergänzt:
public class MyClass {
private static final MethodHandler handler = HandlerFactory.getHandler(...) {
public Object doSomething() {
handler.onMethodStart(this);
long startTime = Clock.getTime();
try {
Object result = real_renamed_doSomething(); // call your method
handler.onMethodFinish(this, Clock.getTime() - startTime, null);
} catch(Throwable e) {
handler.onMethodFinish(this, Clock.getTime() - startTime, e);
throw e;
}
}
public Object real_renamed_doSomething() {
// do something
}
}
Die Konfiguration, wie hier beschrieben, liegt als Datei jrat.xml
im
Programmordner vor und teilt JRat mit, wie auf Pakete, Klassen und Methoden reagiert werden soll.
Ist keine Konfigurationsdatei vorhanden, wird diese automatisch mit Standardeinträgen generiert und sieht wie folgt aus:
<jrat> <settings> <property name="httpServerEnabled" value="true"/> </settings> <profile name="my code"> <criteria> <include/> </criteria> <handlers> <handler factory="org.shiftone.jrat.provider.tree.TreeMethodHandlerFactory"> <property name="outputFile" value="my_code_tree.jrat"/> </handler> </handlers> </profile> </jrat>
Im Abschnitt "profile" der Datei können Handler definiert werden, welche der Aktionsbehandlung dienen, um Events in Methoden
abzufangen. Es können mehrere Handler in einer Konfigurationsdatei definiert werden.
Auswahlkriterien für Methoden und Klassen werden anhand folgender Notation im Abschnitt "criteria" eingetragen:
<include className="*" methodName="*" signature="*"/> <exclude className="*" methodName="*" signature="*"/>
Hiermit ist es möglich, Methoden und Klassen explizit zu erlauben bzw. von der Behandlung durch den Eventhandler auszuschließen.
Der "Tree Method Handler", welcher standardmäßig inkludiert ist, ist für allgemeine Zwecke völlig ausreichend.
Es ist jedoch ohne Weiteres möglich in einer eigenen Klasse die "MethodHandlerFactory" zu implementieren und einen eigenen Eventhandler
zu definieren, welcher auf benutzerdefinierte Events reagieren kann.
keine.
Zurück zur Werkzeugübersicht