Blogpost

Energieverbrauchsmessung mittels jPowerMonitor Java Agent

In Ergänzung zu den vorangegangenen Artikeln über die Energieverbrauchsmessung von Software wird in diesem Beitrag genauer beschrieben, wie der Energieverbrauch von Java Programmen mit Hilfe des in jPowerMonitor integrierten Java Agenten gemessen werden kann.

274
3 Minuten Lesezeit
Green Coding Energieverbrauchsmessung mit Java Agent

In dieser Collection enthalten:

Collection öffnen

jPowerMonitor – Java Agent

Im Beitrag „Green Coding – Energieverbrauch von Software messen“ haben wir dargestellt, was jPowerMonitor ist und, dass mit diesem Tool der Energieverbrauch von Java Programmen auf Methodenebene gemessen werden kann. Der Artikel „Energieverbrauchsmessung von JUnit Tests durch die jPowerMonitor Extension“ hat die JUnit Extension vorgestellt, die in jPowerMonitor enthalten ist. Der folgende Beitrag geht nun genauer auf die Java Agent Funktionalität von jPowerMonitor ein.

Java Agents

Java Agents sind Teil der Java Instrumentation API. Die Instrumentation API1 bietet die Möglichkeit, Java Bytecodes zu ändern sowie dynamisch Code zu einem Programm hinzuzufügen. Beispielsweise nutzen Profiling Tools zur Messung von Performance und Speicherverbrauch Java Agents. jPowerMonitor implementiert ebenfalls einen Java Agent und klinkt sich somit in den bestehenden Quellcode ein, ohne dass dieser Code angepasst werden muss. jPowerMonitor protokolliert den Energieverbrauch der gerade laufenden Methode in dem Java Programm, an das der Agent angehängt wird.

Startup und Konfiguration

Der Java Agent wird mit der Option -javaagent:./jpowermonitor-0.1.0-all.jar an den Java Prozess übergeben. jPowerMonitor sucht per Default nach einer Konfigurationsdatei jpowermonitor.yaml im aktuellen Verzeichnis und im Classpath. Die Konfiguration kann alternativ auch direkt übergeben werden, indem sie mit einem Gleichheitszeichen an den Jar-Namen angehängt wird:
-javaagent:./jpowermonitor-0.1.0-all.jar=my-config.yaml

Die Konfiguration legt fest, mit welchem Strommesstool gemessen wird. Aktuell kann hier „ohm“ für Open Hardware Monitor oder „csv“ für ein beliebiges Tool, das CSV-Dateien erzeugt (z. B. HWiNFO) und die Messwerte darin ablegt, eingetragen werden.

Die Messwerte aus dem Open-Hardware-Monitor werden über die JSON-Schnittstelle des Tools abgefragt. In der Konfiguration muss demnach der Pfad zum gewünschten Messwert hinterlegt werden. Beispielsweise würde der Pfad [‚<Computername>‘, ‚Intel Core i7-9850H‘, ‚Powers‘, ‚CPU Package‘] den CPU Package Stromverbrauch auf einem Intel-Prozessor auslesen. Die genauen Bezeichnungen müssen dem Tool Open-Hardware-Monitor entnommen werden.

Für die CSV-Datei muss zum einen die Spaltennummer (0-basiert) in der CSV-Datei angegeben werden und zum anderen, ob die aktuellen Messwerte in der ersten oder letzten Zeile der CSV-Datei stehen. In der Konfiguration des Java Agents kann darüber hinaus angegeben werden, wie oft die Messwerte ausgelesen werden. Es ist möglich, die Messung auf Java-Packages einzuschränken. So können zum Beispiel nur Klassen aus dem Package group.msg.* gemessen werden.

Weitere Konfigurationsdetails können Sie der Dokumentation des jPowerMonitor Tools entnehmen. Beispielsweise ist es auch möglich, das Abfrageintervall oder den CO2-Emissionsfaktor für den Strommix von Wh in Gramm CO2 zu konfigurieren.

Das Aufrufbeispiel zeigt die Verwendung des Java Agents mit einer Spring-Boot-Batch-Applikation:

Beispiel mit Spring-Boot-Batch-Applikation

Abbildung 1: Verwendung des Java Agents mit einer Spring-Boot-Batch-Applikation

Beim Beenden des Java-Prozesses wird eine Zusammenfassung der verbrauchten Energie ausgegeben:

Shutdown Beispiel

Abbildung 2: Zusammenfassung der verbrauchten Energie

Im vorliegenden Fall wurden ca. 0,32 Wh Strom bzw. 0,16 g CO2 für den Programmlauf verbraucht.

Fazit für die Energieverbrauchsmessung

jPowerMonitor ist ein praktikables Tool zur Messung des Stromverbrauchs von Java Programmen. Wie im Beitrag „Energieverbrauchsmessung von JUnit Tests durch die jPowerMonitor Extension“ beschrieben, kann der Strom beim Testen oder mittels Java Agent zur Laufzeit gemessen werden.

jPowerMonitor hilft Entwicklern daher, herauszufinden, an welchen Stellen des eigenen Programms der meiste Strom verbraucht wird. Dies gibt Entwicklern die Möglichkeit, den Code im Sinne von Green Coding zu optimieren und der Reduzierung von CO2-Emissionen beizutragen.

Quelle
Sustainable Banking

Sustainable Banking

Nachhaltigkeit ist aus der Branche Banking nicht mehr wegzudenken. Treiber sind zum einen die Initiativen von Gesetzgebern und Regulatoren. Aber auch Kunden stellen vermehrt nachhaltige, umweltfreundliche und klimaschonende Aspekte in den Mittelpunkt ihrer Finanzentscheidungen. Um den langfristigen ökonomischen Erfolg zu sichern sowie die regulatorischen Hürden zu meistern, müssen Banken frühzeitig ihre Geschäftstätigkeit auf Nachhaltigkeitsziele ausrichten und fit sein für den Umgang mit Nachhaltigkeitsrisiken.

Wie sieht die optimale Vorbereitung auf eine nachhaltige Zukunft in der Branche Banking aus? Dieser Frage gehen wir in unserer Serie Sustainable Banking auf den Grund. Mehr Informationen zu diesem Zukunftsthema finden Sie auf unserer Webseite.

Hans-Peter Keilhofer

Hans-Peter Keilhofer

ist Dipl. Informatiker mit langjähriger Berufserfahrung und unterstützt als Executive IT Consultant Kunden in der Planung und Umsetzung von IT Architekturen. Darüber hinaus hält er als Dozent an der Universität Passau regelmäßig die Vorlesung „Softwareentwicklung für Fortgeschrittene“ am Lehrstuhl für Wirtschaftsinformatik mit Schwerpunkt Internet- und Telekommunikationswirtschaft.

Schreiben Sie einen Kommentar

Sie müssen sich anmelden, um einen Kommentar zu schreiben.