Java Mission Control Die Entwicklung ist abgeschlossen. Alles ist gut getestet und schon ist die Anwendung im Produktivbetrieb. Schön, wenn jetzt alles stabil läuft. Und was wenn nicht? Dann heißt es möglichst schnell mit Analyseergebnissen aufzuwarten. Was führte wann und warum zu Abweichungen im Verhalten der Anwendung? Ohne repräsen­ tative Datenbasis und ein entsprechend aufeinander abgestimmtes Tooling kommt man jetzt schnell ins Schwitzen. Gut zu wissen, dass in Oracles JDK mit Java Mission Control eine geradezu perfek­ te Toolkette für solche Fälle bereits vorhanden ist. So manch einer mag sich noch an die Zeiten vor Vermutung, dass es in Zukunft sein Dasein wohl gab es den WebLogic-Application Server noch wird. Gehen wir also mit der Zeit und starten wir der "Java-Einkaufstour" von Oracle erinnern. Da von BEA. Der erfreute sich, nicht zuletzt ob seiner JVM-Implementierung JRockit, einer gewissen eher als quelloffenes Tool im OpenJDK fristen unsere erste Mission mit Java Mission Control. Beliebtheit. Die JRockit-VM lieferte bereits damals Erste Schritte mit Java Mission Control durchaus zu einer angenehmen Angelegenheit Die Kommandozentrale von Java Mission Con­- Analysewerkzeuge auf JVM-Ebene. Heute gehört wen­dung daher. Im Binary-Verzeichnis des JDK genau das, was den Betrieb von Anwendungen machen konnte: Live-taugliche Monitoring- und BEA, und damit auch JRockit, zu Oracle. Und weil seit ein paar Jahren nun auch Sun und die HotSpot-JVM zu Oracle gehören, wird seit ge­ trol kommt in Form einer Eclipse-basierten An­ tut es der Aufruf von $JDK_HOME/bin/jmc raumer Zeit an einer "Fusion" der unterschiedlichen JVMs gearbeitet. So kommt es, dass die vormals unter JRockit Mission Control bekannten Tools seit dem Update 40 auf Java Version 7 in Form von Java Mission Control Bestandteil des bzw. %JDK_HOME%\bin\jmc.exe von Oracle ausgelieferten JDKs sind. Bevor wir die Toolkette rund um Java Mission und die Stand-Alone-Variante steht zur Verfü- ein Blick auf die wichtigsten Eckdaten: Mit einem gration des Werkzeugs mittels Plugin über die Control genauer unter die Lupe nehmen, zunächst aktuellen JDK 1.8 erhält man Java Mission Control in Version 5.5. Es bietet eine JMX-Console und ein Java Flight Recorder genanntes Profiling- und gung. Arbeitet man mit Eclipse-IDE, ist die Inte­ von Oracle zur Verfügung gestellte Update-Site möglich. Diagnosewerkzeug. Was aus dem bis­lang präfe- Vorausgesetzt es laufen keine weiteren Java-Pro- lässt sich aktuell nur mutmaßen. Java Mission aufgelistet, in welcher das Werkzeug selbst läuft. rierten JVM-Monitoringwerkzeug VisualVM wird, Control gehört im Zusammenhang mit Oracles JDK sicher die Zukunft. VisualVM liegt dem JDK zwar noch bei, es besteht jedoch Anlass zu der zesse, bekommen wir zunächst die JVM-Instanz Durch Doppelklick auf den in der Baumstruktur dargestellten MBean-Server bauen wir eine Verbindung auf und ► Java Mission Control – Seite 1 Abbildung 1: Oracle Java Mission Control bekommen nun Zugriff auf die MBeans der be­ lässt sich in verschiedenen Konfigurationen betrei­ bieten Laufzeitinformationen in grafisch auf- Zeitspanne oder aber permanent laufzeitrelevan- treffenden JVM. Einige der angebotenen Views bereiteter Form – alles erinnert ein bisschen an VisualVM (siehe Abbildung 1). Interessant sind jedoch die Möglichkeiten zum Erstellen unterschiedlicher Trigger. Hier zeigt sich, dass Java Mission Control sich nicht ausschließ- lich als Entwicklungswerkzeug positionieren möchte. Vielmehr nimmt es gerade auch den Anwendungsbetrieb als mögliches Einsatzgebiet für sich in Anspruch. So lassen sich beispiels­ weise E-Mails beim Erreichen definierter Grenzwerte versenden – oder aber so genannte Flight Recordings starten. Diese basieren auf einigen er­weiterten Möglichkeiten, Laufzeitdaten der JVM mithilfe des Java Flight Recorders aufzuzeich­ nen und sind der eigentliche Kern von Java Mission Control. Lassen Sie uns also einen Blick auf diesen Mechanismus werfen. Java Flight Recorder Mit dem Java Flight Recorder bekommt die von Oracle ausgelieferte HotSpot-JVM gewisser­ maßen einen Flugdatenschreiber verpasst. Dieser Seite 2 ben und zeichnet entweder für eine definierte te Daten seiner JVM auf. Das Ziel ist hierbei nicht die Unterstützung eines "Live-Monitorings", welches durch die Java Management Extensions ja hinreichend abgedeckt ist. Vielmehr geht es da­rum, alle notwendigen Daten für nachgelagerte Laufzeitanalysen ein­zusammeln. Damit schafft der Java Flight Recorder eine erstklassige Mög- lichkeit, z. B. im Fall von problembehaftetem Ver­halten einer Anwendung, auf Daten zurückgrei- fen zu können, die den Zustand des Systems zum betreffenden Zeitpunkt präzise repräsentieren. Zum Chanon der gesammelten Daten zählen unter anderem Garbage Collection Statistiken, mög­- liche Compileroptimierungen zur Laufzeit, Laten­ zen von I/O-Operationen und Locks, Heap- Statistiken und vieles andere mehr. Durch die interne Architektur des Flight Recoders wird sichergestellt, dass diese doch recht umfangreiche Datensammlung nur minimale Auswirkungen auf die Gesamtperformance der eigentlichen An­wendung hat. Glaubt man den Aussagen des Herstellers, liegt der Impact auf die Anwendungsperformance zwischen ein und zwei Prozent. Die Vorteile liegen also auf der Hand – allein ► der für den Einsatz in Produktivumgebungen Darüber hinaus gibt es die Möglichkeit, sich über dacht werden. Java Mission Control ist eines zu verbinden und ein Flight-Recording via Com- erforderliche Lizenzerwerb sollte im Vorfeld be­der von Oracle in die Hotspot-JVM inte­grierten, kommerziellen Features. Für den Einsatz in die dritte Möglichkeit – das Java Mission Control- Frontend. Von hier aus können Flight-Recording- also schon weit im Vorfeld des Produktivbe­triebs, ausgewertet werden. Navigieren wir also zum kann die Toolkette gute Dienste leisten. Lenken wir unsere Aufmerksamkeit also auf diesen As­pekt und lassen Sie uns den Einsatz des Java Start Flight Recording mandline zu initiieren. Wir entscheiden uns für der Anwendungsentwicklung ist allerdings kein separater Lizenzerwerb erforderlich. Auch hier, Abbildung 2 das JCMD-Tool zum gewünschten Java-Prozess Flight Recorders als Profiling-Tool in der Entwicklung betrachten. Sessions konfiguriert, gestartet und später auch Java-Prozess unserer Anwendung und wählen aus dem Kontextmenü den Punkt "Start Flight Re­ cording" aus. Im nun folgenden Dialog dürfen wir noch genauer über Art und Um­fang der zu sam- melnden Daten sowie die Dauer der Aufzeichnung entscheiden. Fürs Erste kommen wir mit dem bereits vor­handenen Template "Profiling on server" über die Runden. Die aufgezeichneten Daten werden vom Java Flight Recorder nach Ablauf der vorgegebenen Aufzeichnungsdauer in eine Datei gespeichert, die wir zur Auswertung wiederum in Java Mission Control einlesen. Die Unterstützung des Tools, der oft recht großen Menge aufgezeichneter Daten die nötigen Erkenntnisse zu entlocken, lässt hier­bei kaum Wünsche offen. Schön gelöst ist vor allem die zeitliche Quantisierung. So lässt sich der Fokus auf interessante Zeitpunkte eingrenzen und man wird nicht von der Gesamtmenge der Um eine Analyse mithilfe von Java Flight Recorder und Java Mission Control durchzuführen, starten wir zunächst die Anwendung unter Angabe von zwei zusätzlichen VM-Parametern: -XX:+UnlockCommercialFeatures -XX:+FlightRecorder ein­gesammelten Daten erschlagen. Ohne Probleme lassen sich so die unterschiedlichsten Frage- stellungen im Handumdrehen beantworten: In welchen Methoden der Anwendung verbringt die JVM, relativ zur gesamten Ausführungsdauer, die meiste Zeit? Ein Klick auf den Abschnitt "Code" eines Flight Recordings (siehe Abbildung 3 auf Seite 4) und schon finden wir eine Zu­ sammenfassung aller "Hot Methods". Oder: Auf Flight-Recordings können auf unterschiedliche Arten gestartet werden. Zum einen lässt sich beim Starten der JVM mit entsprechendem Parameter die Aufzeichnung konfigurieren: welche Teile der Anwendung lassen sich Latenzen und Lock-Contentions zurückführen? Ein Klick auf den Abschnitt "Threads" und wir finden auch diese Informationen in entsprechend aufberei­ teter Form. ► -XX:StartFlightRecording=name=My-Recording,settings=default Java Mission Control – Seite 3 Nun gilt es nur noch die rich­tigen Schlüsse im Hinblick auf die Fehlerbesei­tigung oder Opti­ mierung der Anwendung zu zie­hen. Die Beschaf­ fung eines gesonderten Java-Profilers ist mit der Verfügbarkeit von Java Mission Control in vielerlei Hinsicht überflüssig geworden. Abbildung 3: Liste aller Hot Methods Fazit Das Gesamtpaket rund um Java Mission Control macht einen erfreulich praxistauglichen Eindruck. Der dargebotene Werkzeugkasten unterstützt in erster Linie bei der Lösung von Problemen, die Lernkurve ist verhältnismäßig gering. Die Jahre, die die Toolkette seit ihrer Einführung in BEAs Kontakt buschmais GbR Leipziger Straße 93 01127 Dresden Tel 0351 3209230 Fax 0351 32092329 [email protected] Webwww.buschmais.de JRockit auf dem Buckel hat, haben sie ganz offen­sichtlich wie einen guten Wein reifen lassen. Wer bislang noch nicht in die Verlegenheit gekommen ist, einen Blick auf Java Mission Control zu wer- fen, dem sei es nicht erst zur Analyse des nächsten Memoryleaks aus dem Livesystem ans Herz gelegt. Einfach mal rein­schauen – es lohnt sich. ■ Tobias Israel Tobias Israel ist Berater bei der buschmais GbR. Ein Schwerpunkt seiner Arbeit liegt auf der Erstel­ lung und Umsetzung von Integrati­ onsstrategien für verteilte Unter­ nehmensanwendungen. Copyright © 2015 buschmais GbR Alle Rechte vorbehalten. "buschmais" ist eine eingetragene Marke der buschmais GbR. Ihre Verwendung im Geschäftsverkehr ist nur bei ausdrücklicher, schriftlicher Erlaubnis der buschmais GbR statthaft. Seite 4