Unter der Haube

Wenn du die Absicht hast, dich zu erneuern, tu es jeden Tag… die Devise von Konfuzius gilt auch bei SAP. Eine dieser „Neuerungen“ ist ein hübsches, farbenfrohes Analyse-Tool für die SAP JVM. Okay zugegeben ist dieses Tool auch nicht mehr so neu, aber die Entwicklung dieses Tools geht stetig voran. Der SAP JVM Profiler befasst sich nicht mit der Erstellung von Straftäterprofilen (wer hätte das gedacht?) sondern dient viel mehr als Entwicklerwerkzeug um z.B. den Speicherverbrauch einer Anwendung genauer unter die Lupe nehmen zu können.

Der SAP JVM Profiler gewinnt für einen SAP-Basis Administrator durchaus an Attraktivität betrachtet man folgendes Szenario: Wurde ein Heap Dump eines SAP Java Systems ausgelöst, stellt man sich als erstes die Frage „Wie konnte das passieren? Wodurch wurde es ausgelöst?“. Diese triviale Anforderung ist in der Java Welt im Gegensatz zum ABAP Stack nicht ganz so einfach mit integrierten Tools zu lösen. Einen Heap Dump einer SAP JVM kann man definitiv nicht einfach so auslesen. Man muss an dieser Stelle eher ein Gefühl dafür entwickeln, was zu diesem Zeitpunkt passiert ist. Um einem Verdacht nachgehen zu können, kann dieses Tool sehr hilfreich sein. Vielleicht kann man an dieser Stelle dann doch von der Erstellung eines Übeltäterprofils reden.

SAP verspricht, dass man sich mit diesem Tools einen Blick unter die Haube einer SAP JVM verschaffen kann. Das bedeutet man soll eine detailliertere Übersicht auf die Verwendung der Ressourcen einer SAP JVM ergattern können. Beispielsweise hilft das Tool zum besseren Verständnis des Garbage Collectors . Die normalen Hilfsmittel des Netweaver Administrators lassen den Speicherverbrauch des Heap Speichers eher als eine Art Black Box wirken, der man eine bestimmte Größe zuweist und dann nur noch den aktuellen Freiplatz anhand von Überwachungsknoten ablesen kann. Das stimmt allerdings nicht ganz denn auch im NWA kann man via „Session Management“ den aktuellen Ressourcenverbrauch etwas genauer betrachten und mitschneiden. Die Mittschnitte nennen sich ebenfalls JVM Profiler Speicheranalyse oder JVM Profiler CPU Analyse. Und dies nicht ohne Grund, denn möchte man anschließend  eine dieser Trace-Dateien analysieren, bemerkt man plötzlich, dass man diese „*.pfr“ –Datei nur mit dem SAP JVM Profiler Tool auslesen kann.

Auch dieses Tool ist, wie so oft im SAP Java Umfeld, ein Plug-In für Eclipse. Um eine Analyse überhaupt starten zu können, benötigt man folglich eine aktuelle Eclipse-Version mit mindestens einem JDK 1.7 (oder höher). Außerdem natürlich das SAP JVM Profiler Archiv an sich. Eine Verbindung zum Applikationsserver wird mittels Script jvmmond realisiert. Dieser Daemon wird bei einer Standard SAP Java Installation bereits mitgeliefert und verbirgt sich unter dem Programmverzeichnis der SAP JVM - normalerweise /usr/sap/<SID>/exe/sapjvm_<x>/bin. Diese Verbindung wird praktischerweise nicht benötigt, wenn eine zuvor erstellte „*.pfr“-Datei analysiert werden muss. Eine Verbindung via Daemon bietet aber grundsätzlich auch die Möglichkeit, ein Trace zu starten und zu stoppen.

Sind alle Bedingungen erfüllt und eine Verbindung mit dem Server aufgebaut, kann man in der ersten Übersicht alle laufenden JVM-Prozesse auf dem Server in Hinblick auf Ihre CPU- und Speicherauslastung betrachten:

Um eine detailliertere Analyse des Speicherverbrauchs vornehmen zu wollen, muss man eine sogenannte Allokationsanalyse initialisieren. Diesen Trace kann man bei Bedarf auf einen bestimmten Übeltäter oder andere Faktoren einschränken; notwendig ist das nicht. Man kann also auch den gesamten Datenstrom eines Serverknotens mitschneiden. Diese Momentaufnahme lässt sich nach Abschluss von mehreren Seiten betrachten. Dabei besteht die Möglichkeit den Speicherverbrauch in Abhängigkeit von Benutzern, Applikationen, Threads, Sessions und Methoden anzeigen zu lassen. Für unser Übeltäterszenario bedeutet das: man kann den Spitzenreiter des Speicherverbrauchs ausfindig machen und genau erkennen welche Applikationen dazu geführt haben:

Die Allokationsphasen (hier anhand der sap.com/tc~lm~itsam~ui~mainframe~wd) lassen sich dann wiederum anhand der Zeitachse noch detaillierter darstellen:

Der klare Vorteil dieses Tools liegt also darin, dass man eine zeitliche Historie der Geschehnisse detailliert in Hinblick auf unterschiedliche Faktoren betrachten kann. Außerdem ist die Darstellung der Informationen in einer übersichtlichen Umgebung realisiert und benötigt keinen Debugging-Modus des Java Servers. Der Nachteil ist der höhere Aufwand der Konfiguration um solche Analysen überhaupt erst durchführen zu können. Einem Java Entwickler jedoch zu beweisen, dass seine Applikation der Auslöser eines hohen Ressourcenverbrauchs ist – unbezahlbar.

Autor: Sebastian Klesse