Erhebung von Produkt-Laufzeit-Metriken: Ein Vergleich mit dem SPASS-Meter-Werkzeug Holger Eichelberger and Klaus Schmid Software Systems Engineering, Institute of Computer Science, University of Hildesheim, Germany {eichelberger,schmid}@sse.uni-hildesheim.de Please cite this publication as follows: Holger Eichelberger and Klaus Schmid. “Erhebung von Produkt-Laufzeit-Metriken: Ein Vergleich mit dem SPASS-Meter-Werkzeug”. In: Proceedings of the DASMA Metrik Kongress (MetriKon’12). In German. Shaker Verlag, 2012, pp. 171–180. The corresponding BibTEX-entry is: @INPROCEEDINGS{EichelbergerSchmid12, author = {Holger Eichelberger and Klaus Schmid}, title = {Erhebung von Produkt-Laufzeit-Metriken: Ein Vergleich mit dem SPASS-Meter-Werkzeug}, booktitle = {Proceedings of the DASMA Metrik Kongress (MetriKon’12)}, year = {2012}, pages = {171--180}, publisher = {Shaker Verlag}, note = {In German} } The copyright with this publication is held by the authors Eichelberger and Schmid. Redistribution without this disclaimer is not permitted. The definitive version was published in Proceedings of the DASMA Metrik Kongress (MetriKon’12), 2012. Erhebung von Produkt-Laufzeit-Metriken Erhebung von Produkt-Laufzeit-Metriken: Ein Vergleich mit dem SPASS-Meter-Werkzeug Holger Eichelberger, Klaus Schmid Universität Hildesheim, Marienburger Platz 22, 31131 Hildesheim {eichelberger, schmid}@sse.uni-hildesheim.de Zusammenfassung: Die Erfassung von Produktmetriken zur Laufzeit ist ein wesentlicher Baustein einer Qualitätsstrategie in der Produktentwicklung. Die Erfassung von Produktmetriken in der Entwicklung ist jedoch oft mit signifikantem Aufwand verbunden, da viele Werkzeuge nur bestimmte Eigenschaften erfassen können und ihre Verwendung oft sehr komplex ist. Darüber hinaus entsteht durch die Durchführung der Messung meist ein signifikanter Laufzeit-Overhead. Das Ziel des SPASS-meter-Werkzeugs ist die integrierte Erfassung einer Vielzahl von Metriken bei einfacher Konfiguration und geringem Laufzeit-Overhead. In diesem Beitrag stellen wir SPASS-meter vor und vergleichen es mit bekannten ähnlichen Werkzeugen wie Kieker, OpenCore, Xprof und HPROF. Eine Übersicht der Stärken und Schwächen schließt den Vergleich ab. Schlüsselbegriffe Erfassung von Metriken, Laufzeit-Overhead, Werkzeugvergleich, SPASS-meter 1 Einführung Qualitätsmanagement in der Software-Entwicklung umfasst Planung, Steuerung und Prüfung der Qualität von Softwareprodukten und -prozessen. Erwünschte Qualitätsmerkmale wie z.B. Performanz eines Systems, einer Komponente oder von einzelnen Funktionen werden in Form von Qualitätsanforderungen festgelegt. Im Verlauf der Softwareentwicklung werden diese Anforderungen verfeinert und, falls möglich, in Form von Produktmetriken operationalisiert, um die Umsetzung messbar zu machen. Die Erfassung von Produktmetriken ist jedoch oft mit signifikantem Aufwand verbunden. Viele Werkzeuge können nur bestimmte Eigenschaften erfassen, so dass gegebenenfalls mehrere Werkzeuge in Kombination eingesetzt werden müssen, um die benötigten Metriken zu bestimmen. Zudem ist die Anwendung der Werkzeuge teilweise sehr komplex. Darüber hinaus entsteht durch die Anwendung vieler Werkzeuge meist ein signifikanter Laufzeit-Overhead, der wiederum die gemessenen Daten beeinflusst. MetriKon 2012 H. Eichelberger, K. Schmid In diesem Beitrag stellen wir SPASS-meter1 vor, ein Werkzeug, das die identifizierten Probleme lösen hilft. SPASS-meter unterstützt die integrierte Erfassung einer Vielzahl von Produkt-Laufzeit-Metriken für Java-Programme. Im Gegensatz zu existierenden Werkzeugen ermöglicht SPASS-meter die Messung von Produktmetriken für frei definierbare Programmeinheiten wie Services oder Komponenten. Um SPASS-meter in Bezug auf existierende Arbeiten einordnen zu können, führen wir einen qualitativen und quantitativen Vergleich mit bekannten Werkzeugen wie OpenCore [4], Kieker [7, 10] oder Werkzeugen des Java Development Kit (JDK) durch. In dieser Arbeit analysieren wir den LaufzeitOverhead, insbesondere die Auswirkung der Werkzeuge auf Rechenleistung und Speicherverbrauch. Auch wenn es durchaus ähnliche Vergleichsarbeiten für kommerzielle Werkzeuge gibt, ist uns kein ähnlicher Vergleich bekannt, der sowohl akademische als auch kommerzielle Werkzeuge umfasst. Dieser Beitrag ist wie folgt strukturiert: In Abschnitt 2 stellen wir zunächst SPASS-meter und in Abschnitt 3 die Vergleichswerkzeuge vor. In Abschnitt 4 führen wir einen qualitativen und in Abschnitt 5 einen quantitativen Vergleich der beschriebenen Werkzeuge durch. In Abschnitt 6 fassen wir die Ergebnisse zusammen und geben einen Ausblick auf zukünftige Arbeiten. 2 SPASS-meter In diesem Abschnitt beschreiben wir die grundlegenden Konzepte von SPASSmeter. SPASS-meter ist ein Werkzeug zur flexiblen Erfassung einer Vielzahl von ressourcen-basierten Produktmetriken wie Ausführungszeit, Antwortzeit, Speicherverbrauch, Datei- oder Netzwerktransfer. Dabei interessierten uns nicht nur die Gesamtergebnisse für ein zu messendes Programm, wie sie bereits mithilfe verschiedener Werkzeuge bestimmt werden können, sondern insbesondere die Zusammensetzung der Werte der Produktmetriken bezogen auf einzelne semantische Einheiten wie Services oder Komponenten. Semantische Einheiten können im einfachsten Fall auf Elemente der Programmiersprache wie Methoden, Klassen oder Pakete abgebildet werden. Diese Zuordnung ist jedoch nicht immer möglich, da eine semantische Einheit, abhängig vom gewählten Entwicklungsansatz, aus verschiedenen Elementen auf Implementierungsebene bestehen kann, so kann ein Service durch mehrere Klassen realisiert sein. SPASS-meter unterstützt die Erfassung von Produktmetriken für semantische Einheiten in Form von logischen Gruppen die Elemente der Programmiersprache zusammenfassen. Für jede Gruppe kann die Menge der zu erfassenden Produktmetriken und deren Erfassungsbereich festlegt werden. Der Erfassungsbereich 1 SPASS (Simplifying the Development of Adaptive Software Systems) ist ein messbasierter Ansatz zur Entwicklung adaptiver Systeme der in unserer Arbeitsgruppe entwickelt wird; SPASS-meter ist das zugehörige Mess-Framework. Software Metrik Kongress Erhebung von Produkt-Laufzeit-Metriken definiert ob eine Produktmetrik nur direkt für die Elemente der Gruppe oder auch indirekt für die von der Gruppe aufgerufenen Programmteile ermittelt werden soll. Weiterhin kann SPASS-meter systemweite Metriken, wie beispielsweise die CPU-Auslastung der virtuellen Maschine, bestimmen um relative Produktmetriken abzuleiten und diese über Programme hinweg vergleichbar zu machen. Dadurch ist SPASS-meter sehr flexibel konfigurierbar und ermöglicht indirekt die Kontrolle des Laufzeit-Overheads, da aufwändigere Messverfahren wie indirekte Produktmetriken nur bei Bedarf zum Einsatz kommen. Die Konfiguration von SPASS-meter kann in Form von Quelltext-Annotationen oder als externe Konfigurationsdatei erfolgen. Wie in Java üblich ermittelt SPASS-Meter den Ressourcenverbrauch durch Instrumentierung. Instrumentierung bedeutet, dass zusätzlicher Programmcode, der die Messungen realisiert, in das zu messende Programm eingebracht wird. 3 Vergleichswerkzeuge In diesem Abschnitt stellen wir die Werkzeuge vor, die wir in diesem Beitrag sowohl qualitativ als auch quantitativ mit SPASS-meter vergleichen. Wir beschreiben zunächst die Auswahl und danach die einzelnen Werkzeuge. Die Verfügbarkeit schränkt die Menge der Kandidaten für einen Vergleich deutlich ein. Einerseits ist es nicht selbstverständlich, dass kommerzielle Werkzeuge wie OpenCore, AppDynamics oder JProfiler von den Herstellerfirmen für eine (längere) Evaluation zur Verfügung gestellt werden. Andererseits sind akademische Werkzeuge wie JRaf-2 [1] oder J-SEAL2 [2] oft nicht (mehr) verfügbar oder bereits veraltet. Zudem beschränken wir uns in dieser Arbeit aus Platzgründen auf Werkzeuge, die direkt in der Produktionsumgebung einsetzbar sind, d.h. die ohne grafische Benutzeroberfläche anwendbar sind. Unter den genannten Bedingungen haben wir OpenCore, Kieker [7, 9], Xprof [3, 8] und HPROF [5, 8] für den Vergleich ausgewählt. Wir beschreiben in den folgenden Abschritten für jedes genannte Werkzeug die unterstützten Produktmetriken, die Konfigurierbarkeit und das angewendete Messverfahren. 3.1 OpenCore JXInsight/OpenCore ist ein kommerzielles Werkzeug der Firma JINSPIRED, das insbesondere auf die Ermittlung von Verhaltens-, Qualitäts- und RessourcenAspekten von Java-basierten Programmen ausgelegt ist. Neben reinen JavaApplikationen unterstützt OpenCore JVM-basierte Sprachen wie Jython und JRuby sowie die Analyse von SQL-Anfragen. Die Konfiguration von OpenCore erfolgt durch Festlegung der zu beobachtenden Programmteile, der zu ermittelnden Messwerte (Probes) und der abzuleitenden Metriken (Metrics). Die zu beobachtenden Programmteile werden als ein- oder MetriKon 2012 H. Eichelberger, K. Schmid ausgeschlossene Pakete bzw. Klassen angegeben. OpenCore unterstützt zeitbasierte Messwerte wie z.B. verstrichene Laufzeit oder benötigte Zeit für die automatische Speicherbereinigung sowie Zählgrößen wie z.B. belegter Speicher oder Anzahl der blockierten Threads. Als abgeleitete Metriken können z.B. Durchschnittswert, Maximum oder Varianz (der Differenzen aufeinanderfolgender) Messwerte angewendet werden. Die Konfiguration erfolgt in Form von Dateien. OpenCore ermittelt die Produktmetriken durch Instrumentierung. 3.2 Kieker Kieker [7] ist ein OpenSource Werkzeug der Arbeitsgruppe Software Engineering der Universität Kiel. Kieker ist insbesondere auf die Beobachtung von Kontrollflüssen und Ausführungszeit ausgelegt. Die Analyse der aufgezeichneten Daten erfolgt nach Beendigung der Messung, d.h. offline. Kieker ist auf JavaProgramme anwendbar und wird aktuell auf VisualBasic und .NET erweitert [9]. Die Konfiguration von Kieker legt fest welche Produktmetriken für welche Klassen zu ermitteln sind. Dies kann in Form von Quelltext-Annotation oder als externe Konfigurationsdatei erfolgen. Kieker ermittelt die Produktmetriken durch Instrumentierung. Unter Verwendung der quellenoffenen Bibliothek SIGAR1 (System Information Gatherer) können zudem Informationen des Betriebssystems wie zum Beispiel der Gesamtspeicherverbrauch oder die Prozessorauslastung ermittelt werden. 3.3 XProf Der Hotspot-Profiler [3, 8] des Oracle JDK identifiziert laufzeitintensive Methoden (hotspots). Diese werden von der virtuellen Maschine als Teil der Laufzeitoptimierung transparent in nativen Code übersetzt und ausgeführt. Aufgrund des speziellen Einsatzgebiets ermittelt der Hotspot-Profiler ausschließlich die Laufzeit von Methoden. Die virtuelle Maschine wird durch den Parameter Xprof angewiesen, die Daten zu sammeln, die der Hotspot-Profiler im Normalbetrieb verwirft. Die gesammelten Daten werden am Ende der Programmausführung ausgegeben. XProf ist nicht konfigurierbar. 3.4 Interne Java-Profiler Der Heap/CPU-Profiler (HPROF) [5, 8] des Oracle JDK zeichnet den Speicherverbrauch und die Laufzeiten von Java-Programmen auf. HPROF ist als einfaches Werkzeug zur Unterstützung der Programmierung gedacht. 1 http://www.hyperic.com/products/sigar Software Metrik Kongress Erhebung von Produkt-Laufzeit-Metriken Produktmetrik OpenCore i Kieker i Xprof HPROF i i x Methode Klasse Paket Gruppierung Annotationen Datei x x x x x x x x x x x x x x x x x x d x x x anwendbar für Programme in I/O-Transfer d,i d,i Mechanismus Granularität Speicher Speicher d,i Betriebssystem CPU-Zeit Laufzeit Spassmeter I/O-Transfer Programm Konfiguration Java Java, Jython, JRuby, SQL Java, VB, .NET Java Java Tabelle 1: Zusammenfassung der Werkzeuge (d=direkt, i=indirekt, x=unterstützt). Die Konfiguration von HPROF beschränkt sich im Wesentlichen auf die Art der Aufzeichnung und deren Häufigkeit. Als Produktmetriken ermittelt HPROF den Anteil der Instanzen einer Klasse am Speicherverbrauch sowie die Häufigkeit der Ausführung einzelner Methoden bzw. deren Anteil an der Programmlaufzeit. HPROF ermittelt Produktmetriken durch Instrumentierung. 4 Qualitativer Vergleich In diesem Abschnitt fassen wir die Eigenschaften der bisher beschriebenen Werkzeuge zusammen. Wir klassifizieren dafür welche Arten von Messwerten ermittelt werden, wie die Ermittlung von Messwerten konfiguriert werden kann, auf welche Weise die Messwerte ermittelt werden und auf welche Programmiersprachen der jeweilige Ansatz anwendbar ist. Dabei konzentrieren wir uns insbesondere auf den Vergleich mit SPASS-meter. Tabelle 1 fasst die besprochenen Eigenschaften und insbesondere die Unterschiede zusammen. SPASS-meter zeichnet sich durch eine breite Unterstützung von Ressourcen und vielfältige Konfigurierbarkeit aus. Auch OpenCore misst verschiedene Ressourcen (nur für diesen Vergleich relevante sind in Tabelle 1 dargestellt) und unterstützt Java-ähnliche Sprache und SQL. Kieker fokussiert insbesondere auf Laufzeit und die Messung einiger Systemressourcen. Xprof und HPROF sind einfache Programme zur Unterstützung der Programmierung. MetriKon 2012 H. Eichelberger, K. Schmid 5 Quantitativer Vergleich Die Ermittlung von Laufzeit-Produktmetriken für Java-Programme erfolgt in der Regel durch Instrumentierung, das heißt durch Veränderung des zu messenden Programms. Dadurch werden jedoch zugleich die Laufzeit-Eigenschaften des zu messenden Programms verändert. Damit möglichst unverfälschte Werte ermittelt werden, ist es daher notwendig diese Beeinflussung möglichst gering zu halten. Es ist daher ein Gütekriterium für ein Messwerkzeug, dass die Beeinflussung möglichst gering gehalten wird. Es ist darüber hinaus auch von praktischer Bedeutung: jede Erhöhung der Rechenzeit oder des Speicherbedarfs macht die Anwendung der Werkzeuge aufwändiger. In diesem Abschnitt vergleichen wir die oben beschriebenen Werkzeuge in quantitativer Weise. Dazu analysieren wir die Auswirkung (Overhead) der Anwendung der einzelnen Werkzeuge auf ein Testsystem bezüglich Rechenleistung und Speicherverbrauch. Im nächsten Abschnitt beschreiben wir die Umgebung zur Analyse der Werkzeuge. In Abschnitt 5.3 diskutieren wir die Ergebnisse für Rechenleistung und in Abschnitt 5.4 die Ergebnisse für Speicherverbrauch. 5.1 Messumgebung Um den Overhead der einzelnen Werkzeuge zu bestimmen, wenden wir jedes Werkzeug auf eine Testsuite an. Das Werkzeug und auch die Testsuite werden auf einem Rechnersystem ausgeführt, das speziell für diese Analyse installiert wurde. In diesem Abschnitt beschreiben wir das Rechnersystem, das installierte Betriebssystem, die Softwareumgebung und die verwendete Testsuite. Die Messungen werden auf einem Dell OptiPlex 790MT durchgeführt, der mit einem Intel Core i5-2500 3.30GHz Prozessor, 4GByte Hauptspeicher 1.3GHz DDR3-RAM und einer 128GB SATA solid state disk ausgestattet ist. Als Betriebssystem installieren wir Ubuntu Linux, Version 12.04.1 64 Bit ohne grafische Benutzeroberfläche, um mögliche Beeinflussungen durch eine grafische Benutzeroberfläche zu vermeiden. Es wird kein Virenscanner installiert. Automatische Updates werden deaktiviert. Als Java-Umgebung verwenden wir das (zum Zeitpunkt der Messungen aktuelle) Oracle JDK 1.6.0_34 64 Bit. Um den Ressourcenverbrauch der virtuellen Maschine zu ermitteln, wird sysstat1 installiert und so konfiguriert, dass der aktuelle Verbrauch einmal pro Sekunde aufgezeichnet wird. In der Literatur werden üblicherweise bekannte Systeme oder Testsuiten verwendet um Messergebnisse in nachvollziehbarer Weise zu ermitteln. In [1, 2, 10] werden beispielsweise Benchmark-Suiten der Standard Performance Evaluation 1 http://sebastien.godard.pagesperso-orange.fr/ Software Metrik Kongress Erhebung von Produkt-Laufzeit-Metriken Corporation (SPEC) eingesetzt. Für unsere Messungen verwenden wir den aktuellen Java Virtual Machine Benchmark SPECjvm20081, da dieser frei verfügbar ist und auch in der Literatur meist als Referenz herangezogen wird. SPECjvm2008 besteht aus 37 Einzel-Benchmarks die die Performanz der virtuellen Maschine unter Last bestimmen. Dabei werden unter anderem der JavaCompiler, Fast Fourier Transformationen, kryptografische Berechnungen, XMLTransformationen und Anwendungsprogramme ausgeführt. 5.2 Messvorbereitung und Messablauf Als Vergleichsgrundlage werden Rechenleistung und Speicherverbrauch der Benchmark Suite in „Leerlauf-Konfiguration“ bestimmt. Für die Messungen der Werkzeuge verwenden wir OpenCore in Version 6.2.M10, Kieker in Version 1.5 und XProf sowie HPROF aus dem JDK Version 1.6.0_34. Da Laufzeit die gemeinsame Produktmetrik aller beschriebenen Werkzeuge ist, wird für jedes Werkzeug eine Konfiguration festgelegt, die die Ermittlung des Laufzeitanteils jedes Einzel-Benchmarks beschreibt. Bei der folgenden Analyse ist zu beachten, dass die einzelnen Werkzeuge unterschiedliche Aspekte von Laufzeit messen. Für zusätzliche Vergleiche wurden weitere Konfigurationen für alle 37 EinzelBenchmarks erstellt, die die Breite der von den jeweiligen Werkzeugen unterstützten Produktmetriken abdecken. Alle Konfigurationen wurden so definiert, dass keine indirekten Produktmetriken außer Laufzeit bestimmt werden. Um mögliche Schwankungen während der Ausführung zu eliminieren, wird SPECjvm2008 in jeder Konfiguration fünfmal in Folge mit jeweils 15 Minuten Pause ausgeführt. Dabei führen wir die Basis-Konfiguration des SPECjvm2008 auf einer Client/Hotspot-JVM mit maximaler Stackgröße von 1GByte aus. Für den SPECjvm2008 geben wir keine besonderen Einstellungen (Basis-LastModus). Insgesamt dauert ein Durchlauf des SPECjvm2008 mit diesen Einstellungen ca. 130 Minuten, d.h. die Messung für eine Konfiguration fast 12 Stunden. 5.3 Rechenleistung SPECjvm2008 ermittelt die Anzahl der Operationen pro Minute für die 37 EinzelBenchmarks und ein kombiniertes Ergebnis für die gesamte Suite. Für die Konfiguration ohne Metrikenerfassung liegt das kombinierte Ergebnis im Bereich von 163 bis 165 Operationen pro Minute. Abbildung 1 illustriert die Resultate für jede Konfiguration (jeweils fünf Messun- gen) als Kastengrafik (Box-Whisker-Plot). Aufgrund der Messergebnisse teilen wir die Werkzeuge in zwei Gruppen ein: in Werkzeuge mit geringem und Werkzeuge mit hohem Einfluss auf die Rechenleistung. Abbildung 1 a) stellt die 1 http://www.spec.org/jvm2008/ MetriKon 2012 H. Eichelberger, K. Schmid 113 166 165 112,5 164 112 163 162 111,5 161 111 160 110,5 159 158 110 SPECjvm kieker openCore openCore+ SPASS-meter SPASS-meter+ Xprof a) b) Abbildung 1: Einfluss der Werkzeuge auf die SPECjvm-Werte pro Minute Gruppe mit geringem Einfluss (inklusive Leerlauf-Konfiguration) dar. Abbildung 1 b) zeigt in anderer Achsenskalierung die Gruppe mit deutlichem Einfluss auf die Laufzeiteigenschaften dar. Die Messergebnisse mit Erfassung weiterer Produktmetriken neben Laufzeit sind mit „+“ bezeichnet. Mit HPROF terminierte keine Ausführung von SPECjvm2008 innerhalb von 4 Stunden. In der Gruppe der Werkzeuge mit geringem Einfluss liegt die Streuung der Messwerte bei weniger als 1,5 Operationen pro Minute. OpenCore erzeugt den geringsten Overhead (weniger als 1% in beiden Konfigurationen). Die Messungen mit Kieker ergeben 1,1% Overhead. Kieker erzeugt dabei Aufzeichnungsdateien von insgesamt mehr als 14 GByte. Die Anwendung von SPASS-meter führt in beiden Konfigurationen zu weniger als 2,8% Overhead was durch die Laufzeit-Zusammenfassungen zu Gruppierungen und noch nicht abgeschlossene Optimierungsarbeiten begründet ist. Man erkennt zugleich jedoch auch die verbleibende starke Streuung trotz Mittelung der gemessenen Werte. So erscheint OpenCore teilweise besser als das Originalprogramm und auch bei SPASS-meter wurden bessere Werte mit der Erfassung zusätzlicher Metriken gemessen, obwohl die Performanz leicht geringer sein sollte. In der Gruppe mit deutlichem Einfluss erzeugt Xprof ca. 32% Overhead. 5.4 Speicherverbrauch Den Speicherverbrauch der Werkzeuge haben wir aus den periodischen Aufzeichnungen von sysstat ermittelt. Wie in der Kastengrafik in Abbildung 2 dargestellt liegt der durchschnittliche Speicherverbrauch in allen Konfigurationen bei ca. 600 MByte, d.h. im Streuungsbereich der Leerlaufkonfiguration. Streuungen der Messwerte können insbesondere durch die automatische Speicherverwaltung von Java auftreten, z.B. wenn die Bestimmung des aktuellen Software Metrik Kongress Erhebung von Produkt-Laufzeit-Metriken 16,5 16 15,5 15 14,5 14 13,5 13 12,5 12 SPECjvm kieker openCore openCore+ SPASS-meter SPASS-meter+ Xprof Abbildung 2: Speicherverbrauch der Werkzeuge in % (von 4GByte) Speicherverbrauchs zeitlich kurz vor oder nach der automatischen Speicherbereinigung erfolgt. OpenCore und SPASS-meter weisen in unseren Messungen die geringsten Schwankungen auf. Xprof belegt im Maximum bis zu 40MBytes mehr Speicher als die anderen Konfigurationen. Dies ist wahrscheinlich eine Folge der umfangreichen Aufzeichnung für sämtliche ausgeführten Methoden. 6 Zusammenfassung Die Erfassung von Laufzeit-Produktmetriken ist ein wichtiger Baustein der Qualitätssicherung. Werkzeuge zur Bestimmung von Produktmetriken unterscheiden sich in den unterstützten Produktmetriken, der Konfiguration und dem Grad der Beeinflussung (Overhead). In diesem Beitrag haben wir SPASS-meter, ein neues Werkzeug zur Bestimmung des Ressourcenverbrauchs von Java-Programmen vorgestellt und in qualitativer und quantitativer Weise mit bekannten Programmen (OpenCore, Kieker, Xprof und HPROF) verglichen. In qualitativer Hinsicht unterscheidet sich SPASS-meter (auch von weiteren existierenden Werkzeugen) in der Art der unterstützten Produktmetriken und der flexiblen Konfiguration. SPASS-meter ermöglicht insbesondere die Bestimmung des Ressourcen-Verbrauchs frei definierbarer semantischer Programmeinheiten. Der quantitative Vergleich zeigt, dass OpenCore, Kieker und SPASS-meter ähnlich wenig Overhead erzeugen. Im Gegensatz zu OpenCore und Kieker, die seit Jahren entwickelt und optimiert werden, ist das Optimierungspotential von SPASS-meter noch nicht voll ausgenutzt. Xprof hat signifikant mehr Overhead. Historisch betrachtet sind die gemessenen Werte von OpenCore, Kieker und SPASS-meter bemerkenswert. Ältere Werkzeuge führten zu deutlich größeren Overheads. So führte beispielsweise JRaf-2 [1] unter SPECjvm98 zu einer Re- MetriKon 2012 H. Eichelberger, K. Schmid duktion der Rechenleistung um 20%. Weitaus größere Overheads werden ebenfalls für aktuelle Profiler, wie beispielsweise Eclipse TPTP berichtet [6]. In Zukunft werden wir zum Beispiel im EU-geförderten Forschungsprojekt INDENICA mit SPASS-meter den Ressourcenverbrauch einzelner Services auf verschiedenen Service-Plattformen bestimmen. Die praktischen Erfahrungen werden auch helfen, SPASS-meter weiter zu optimieren. SPASS-meter wird als Teil von INDENICA unter Open Source Lizenz veröffentlicht werden. Danksagungen Wir bedanken uns bei der Firma JInsight, insbesondere bei Herrn Rod Peakcock, für die freundliche Bereitstellung einer Forschungslizenz für OpenCore. Diese Arbeit wird teilweise durch das INDENICA Projekt unterstützt. INDENICA wird durch die Europäische Kommission unter der Fördernummer 257483 im Bereich Internet of Services, Software & Virtualisation (ICT 2009.1.2) im 7. Rahmenprogramm gefördert. Literaturhinweise [1] W. Binder and J. Hulaas. A Portable CPU-Management Framework for Java. IEEE Internet Computing, 8:74–83, September 2004. [2] W. Binder, J. G. Hulaas, and A. Villazón. Portable resource control in Java. In OOPSLA '01, pages 139–155, 2001. [3] Java Performance Tuning team. Question of the month: -Xprof, 2012. http://www.javaperformancetuning.com/news/qotm037.shtml. [4] JINSPIRED. OpenCore, 2012. http://www.jinspired.com. [5] Kelly O'Hare. HPROF: A Heap/CPU Profiling Tool in J2SE 5.0, 2004. http://java.sun.com/developer/technicalArticles/Programming/HPROF.html. [6] D. Okanovic and M. Vidakovic. Performance Profiling of Java Enterprise Applications. In CIST 2011, 2011. [7] M. Rohr, A. van Hoorn, J. Matevska, N. Sommer, L. Stoever, S. Giesecke, and W. Hasselbring. Kieker: Continuous Monitoring and on demand Visualization of Java Software Behavior. In SE '08, 2008. [8] SUN. Java Tuning White Paper, 2005. http://www.oracle.com/technetwork/java/tuning-139912.html. [9] A. van Hoorn, H. Knoche, W. Goerigk, and W. Hasselbring. Model-driven instrumentation for dynamic analysis of legacy software systems. SofwaretechnikTrends, 31(2), 2012. [10] A. van Hoorn, J. Waller, and W. Hasselbring. Kieker: A framework for application performance monitoring and dynamic software analysis. In ICPE '12, pages 247–248, 2012. Software Metrik Kongress