07.12.2011

JETM - Spring 3 Runtime Performance Monitoring


Eine Möglichkeit für die Messung der Performance wurde ja bereits im Beitrag "Performance - Zeitmessung mit Servletfiltern" beschrieben.

Soll eine feingranulare Messung durchgeführt werden, so bietet sich eine andere Art der Performancemessung an. Sicherlich ist eine Möglichkeit mit einem selbstgeschriebenen AOP Mechanismus die entsprechenden Methoden zu analysieren. Allerdings findet sich mit JETM ein bereits vollständig entwickeltes Framework zur Analyse der eigenen Anwendung.


JETM bietet unterschiedliche Features für das Monitoring der eigenen Anwendung. Angefangen über das deklarative bzw. programmatische Performance Monitoring über eine dedizierte Auswertung über HTML, Swing oder textuelle Repräsentation. Laut Frameworkbeschreibung ist durch JETM nur ein geringer Overhead bei Einsatz spürbar und somit ist das Framework auf für den produktiven Einsatz geeignet. Die Konfiguration des Frameworks geschieht auf der Deployment Unit an sich und hat somit den Vorteil, dass die VM nicht betroffen ist. Somit werden die Performance Messungen ausschließlich für die gewünschte Anwendung durchgeführt.

JETM unterstützt unterschiedliche JDKs, so dass alle gängigen Umgebungen abgedeckt sind:
  • SUN / Oracle JDK 1.3, 1.4, 5.0,. 6.0
  • Bea JRockit

Leider ist noch keine Aussage über den Einsatz mit der aktuellen JDK Version, JDK 7, getroffen. Das Beispiel in diesem Blog ist allerdings mit dem JDK 7 erstellt worden, so dass eine grundlegende Funktion gewährleistet ist.

Für den Einsatz im JavaEE Umfeld steht eine umfangreiche Integration in verschiedene Frameworks zur Verfügung. Deklaratives Monitoring ist für nahezu alle Framwworks möglich, die AOP unterstützen. Zusätzlich besteht ein bereits eingebauter HTTP Server für das Monitoring, wie auch eine einfache Ausgabe der Daten über Log4J, Commons-Logging oder einfaches Java Logging.

Ein wesentlicher Vorteil von JETM ist die Nutzung von AOP für das Monitoring, so dass bereits bestehende Anwendung leicht erweitert werden können. Die bereits bestehende Anwendung ist in diesem Fall eine einfache Anwendung zur Berechnung des Wechselkurses mit Hilfe der ECB.



Die Anwendung ist einfach aufgebaut, die aktuellen Wechselkurse werden von der ECB geladen und per SAX-Parser durch die Anwendung verarbeitet. Die somit geladenen Wechselkurse werden schlussendlich durch den CurrencyCalculator für die Umwandlung genutzt. Getestet wird die Anwendung durch die Ausführung von unterschiedlichen Unit-Tests.

Um die Performance zu messen wird JETM in die Anwendung eingebracht. Durch die nahtlose Integration via AOP reicht eine Erweiterung der vorhandenen Spring-Konfiguration.

Damit die Spring Konfiguration erweitert werden kann, müssen die JETM Bibliotheken als Maven Dependency hinzugefügt werden, so dass diese auf dem Classpath vorhanden sind.

Eventuell muss noch eine weitere Dependency für die cglib Bibliotheken hinzugefügt werden. Im zweiten Schritt wird die Spring Konfiguration erweitert und JETM aktiviert.


Die zu messenden Beans können mit Hilfe eines Patterns definiert und eingegrenzt werden, Dabei können die Beans direkt deklariert werden, oder mit Wildcards zusammengefasst werden.

JETM stellt, wie oben bereits erwähnt, unterschiedliche Möglichkeiten zur Auswertung der Messungen bereit. In diesem, einfachen, Fall ist eine Auswertung per HTTP-Konsole nicht erforderlich, da der gesamte Kontext nur während der Test zur Verfügung steht. Somit reicht die Ausgabe der Performance-Messung durch Log4J.

Die Ausgaben erfolgen dann über Log4J und einen entsprechend konfigurierten Appender. Einzig die dedizierte Ausgabe ist eine kleine, letzte Hürde. 


Die Daten zur Performance finden sich dann im entsprechenden Logfile und können weiterverwendet werden. Dort finden sich Messpunkte, Ausführzeiten, Aufrufzeiten und weitere statistische Daten, die zur Analyse genutzt werden können.

Das komplette Beispiel findet sich, wie immer, im Repository.

Keine Kommentare:

Kommentar veröffentlichen