
Die Anwendungsanalyse beinhaltet Angaben zu Java Exceptions, die während der Ausführung aufgetreten sind sowie den Methoden-Trace der Anwendung.
Sie haben eine Profiling-Sitzung abgeschlossen, in der Sie das Aufzeichnen von Anwendungsdaten aktiviert hatten. Sie befinden sich in der Auswertungsübersicht zu dieser Sitzung
Weitere Informationen: Profiling-Daten auswerten
Je nachdem, welche Analysen Sie für Ihre Profiling-Sitzung aktiviert hatten, können Sie diese nun auswerten.
Java Exceptions auswerten
Wählen Sie in der Navigationsstruktur den Knoten .
Sie bekommen auf der rechten Seite eine Tabelle mit den Java-Exceptions, die während der Profiling-Sitzung in allen VMs des VM Containers aufgezeichnet wurden. Die Tabelle enthält
den Namen der Exception-Klasse
die Häufigkeit, wie oft die Exception geworden wurde
Dadurch erhalten Sie Aufschluss darüber, ob Fehlerzustände angemessen behandelt werden und was möglicherweise ihre Ursachen sind.
Alle Tabellenzeilen sind vorne mit einem Dreieck gekennzeichnet um anzudeuten, dass sich die Zeilen durch Doppelklick expandieren lassen und dann in den Folgezeilen Detailinformationen angezeigt werden. In diesem Falle sind dies die Ergebnisse für die vier Exception-Operationen (Throw, Catch, Finally, Clear JNI).
THROW: Die Anzahl gibt an, an wie vielen verschiedenen Methodenlokationen die Exception geworfen wurde. Expandiert man die Zeile durch Klick auf das Dreieckssymbol vorne, so werden diese verschiedenen Lokationen in entsprechend vielen Zeilen in Gestalt von Stack Traces angezeigt. Ein Stack-Trace enthält folgende Informationen:
die oberste Methode auf dem Stack mit Klassen- und Methodennamen sowie Zeilennummer, so dass man schnell die Codestelle identifizieren kann, wo die Exception geworfen wurde;
die Anzahl, wie häufig die Exception an dieser Stelle geworfen wurde.
Doppelklick auf die Stack Trace-Zeile expandiert die Anzeige auf die Stack-Tiefe, mit der der Stack bei der Profiling-Sitzung aufgezeichnet wurde.
CATCH: Die Anzahl gibt an, an wie vielen verschiedenen Methodenlokationen die Exception abgefangen wurde. Expandiert man die Zeile durch Klick auf das Dreieckssymbol vorne, so werden diese verschiedenen Lokationen in entsprechend vielen Zeilen angezeigt:
Klassen- und Methodennamen sowie Zeilennummer, so dass man schnell die Codestelle identifizieren kann, wo die Exception abgefangen wurde
Anzahl, wie häufig die Exception an dieser Stelle abgefangen wurde
FINALLY: Die Anzahl gibt an, in wie vielen verschiedenen "finally"-Blöcken des Java-Programms die Exception behandelt wurde. Da die Bearbeitung des "finally"-Blocks nur dann registriert wird, wenn eine Exception vorliegt und nicht, wenn das Programm normal abläuft, gehen in diese Zahl nur Exceptions ein, die vorher nicht durch einen "catch"-Befehl abgefangen wurden. Die FINALLY-Zeilen enthalten wie die CATCH-Zeilen Methodenlokationen und lassen sich wie diese expandieren.
CLEAR JNI: Die Anzahl gibt an, an wie vielen verschiedenen Methodenlokationen die Exception durch einen Java Native Interface (JNI)-Befehl explizit gelöscht wurde. Da diese Art der Fehlerbehandlung nur in systemnahen Programmen verwendet werden sollte, dürften solche Tabellenzeilen bei normalen Java-Anwendungsprogrammen nicht auftreten. Die "CLEAR JNI"-Zeilen enthalten wie die "CATCH"-Zeilen Methodenlokationen und lassen sich wie diese expandieren.
Die Tabellenzeilen erlauben nur eine beschränkte Anzahl von Zeichen zur Darstellung der Methodenlokationen. Ist eine Textzeile abgeschnitten, so kann man sie sich mit Hilfe des Kontextmenüs (Klick auf die rechte Maustaste) "Anzeigen komplette Textzeile" in einem Popup vollständig anzeigen lassen.
Die Tabelle ist per Default absteigend nach der Anzahl der geworfenen Exceptions sortiert, so dass man schnell die besonders häufigen Fehlersituationen identifizieren kann.
Zusammen mit der Tabelle der Exception-Operationen werden immer auch Einträge in den Thread Trace gemacht. Diese kann man sich in der Auswertung der Thread Aktivitäten (s.u.) anschauen.
Methoden-Trace auswerten (Thread Aktivitäten)
Wählen Sie in der Navigationsstruktur den Knoten .
Sie bekommen auf der rechten Seite eine Tabelle mit den Methodenaufrufe, die während der Profiling-Sitzung in den einzelnen Threads einer VM durchlaufen wurden (in chronologischer Reihenfolge).
Wählen Sie in der Kopfzeile die Nummer der VM und dazu den Thread aus, dessen Aktivitäten Sie sehen möchten.
Die Threads werden in Form einer Dropdown-Liste zur Auswahl angeboten. Mögliche Einträge sind:
RFC Server (in-process): Der Thread hat ein Java-Anwendungsprogramm bearbeitet, und zwar im selben Workprozess, in dem das rufende ABAP-Programm lief. Der Aufruf erfolgte über einen Remote Function Call (RFC).
RFC Server (out-of-process): Der Thread hat ein Java-Anwendungsprogramm bearbeitet, wobei das rufende ABAP-Programm allerdings in einem anderen Workprozess, auf einem anderen Applikationsserver oder sogar in einem anderen System lief. Der Aufruf erfolgte über einen Remote Function Call (RFC).
VMC Event Container, VM Control Handler und VM Message Handler: Diese drei Threads gehören zum VM Container-Framework und bearbeiten Events, VM-übergreifende Variablen bzw. Nachrichten, die VMs zur Kommunikation untereinander austauschen.
Reference Handler und Finalizer: Diese zwei VM-internen Threads bearbeiten "Reference"-Objekte bzw. als "final" deklarierte Java-Objekte im Zusammenhang mit Garbage Collections.
Darüber hinaus tauchen auch Threads in der Liste auf, die von der Anwendung selbst gestartet wurden.
In der Thread-Auswahlbox sind die Einträge nach abnehmender Anzahl von Aktivitäten in den Traces sortiert. Da per Default die Ergebnisse des obersten Eintrags in der Tabelle angezeigt werden, sieht man sofort die Ergebnisse des "relevantesten" Threads.
Die Tabelle im oberen Teil enthält die Ergebnisse für den betrachteten Thread. Da die Aktivitäten eines Threads sehr zahlreich sein können, sind die Ergebnisse ggf. in Gruppen eingeteilt. Durch Doppelklick auf das Dreieckssymbol vorne in der Gruppenzeile lässt sich die Gruppe expandieren. In den Folgezeilen werden dann die einzelnen Aktivitäten aufgelistet.
Thread-Aktivitäten
Aktivitäten, die den Thread betreffen, enthalten "thread" in der Ergebniszeile.
Beispielsweise sind Zeilen mit "set thread" Wertzuweisungen von Thread-Namen, Mandant und Benutzer, Session-Name, Komponenten- und Anwendungsnamen oder Requests.
Abhängig davon, welche der Traces für die Profiling-Sitzung ausgewählt worden waren, enthält die Tabelle weitere, unterschiedlich umfangreiche Einträge:
Objektzuweisungen (bei Speicheranalyse),
Methoden Trace (bei Anwendungsanalyse),
Java-Exceptions (bei Anwendungsanalyse) und
Monitor Trace (bei Synchronisierung)
Shared Lock Trace (bei Synchronisierung)
Weitere Informationen: Neue Sitzung anlegen und starten
Objektzuweisungen
Aktivitäten, die bei den Objektzuweisungen aufgezeichnet wurden, haben die Form "assign to" und bezeichnen beispielsweise Wertzuweisungen an
Klassenvariablen
bekannte und unbekannte Instanzvariablen
Slots von Array-Variablen
Nach Einfachklick auf eine Ergebniszeile erscheint im unteren Teil ein Bild mit Detailinformationen zum Quell- und Zielobjekt der Zuweisung sowie zum Thread und der Methodenlokation, wo die Zuweisung stattfand.
Methoden Trace
Aktivitäten, die im Methoden Trace aufgezeichnet wurden, haben die Form:
"call" <Methodenlokation> "from" <Methodenlokation> oder
"return from" <Methodenlokation> "to" <Methodenlokation>.
Darin steht <Methodenlokation> für den Klassen- und Methodennamen sowie die Codezeilennummer der rufenden bzw. aufgerufenen Methode. Ein Dreieckssymbol vorne in einer Ergebniszeile kennzeichnet einen geschachtelten Methodenaufruf. Durch Doppelklick auf das Dreieckssymbol kann man die Aufrufhierarchie expandieren.
Nach Einfachklick auf eine Ergebniszeile erscheint im unteren Teil ein Bild mit Detailinformationen zu der aufrufenden und der gerufenen Methoden sowie zum Thread selbst. Darin erhält man durch fortgesetztes Expandieren der mit "caller" bzw. "callee" gekennzeichneten Ergebniszeilen folgende Informationen zur aufrufenden bzw. aufgerufenen Methode:
Klassenname einschl. Paketname,
Klassen- und Instanzvariablen
Classloader der Klasse
die gleichen Informationen von allen Superklassen, falls es welche gibt
Methodenlokation mit Name, Signatur und Zeilennummer im Quellcode
Zum Thread erhält man folgende Detailinformationen:
Interne Kennung (Thread Id)
Thread-Name
Benutzerdaten (Mandant, Benutzername)
Anwendungs- und Komponentenname (bei deployten "Anwendungen"; vgl. Anwendungen anzeigen)
Session-Name
Request-Name
Java-Exceptions
Exception-Operationen, die für die Analyse der Java-Exceptions aufgezeichnet wurden, tauchen auch in den Thread-Aktivitäten auf und haben hier die Form
"throw <Exception-Klasse> in <Methodenlokation>"
"catch <Exception-Klasse> in <Methodenlokation>"
"finally due to <Exception-Klasse> in <Methodenlokation>"
"clear (JNI) <Exception-Klasse> in <Methodenlokation>"
Nach Einfachklick auf eine Ergebniszeile erscheint im unteren Teil ein Bild mit Detailinformationen zur Exception-Klasse, zum Thread und zur Methodenlokation.
Monitor Trace
Aktivitäten, die im Monitor Trace aufgezeichnet wurden, haben die Form "wait on monitor of <Objekt-Id>" oder "notify all threads waiting on monitor of <Objekt-Id>".
Nach Einfachklick auf eine Ergebniszeile erscheint im unteren Teil ein Bild mit Detailinformationen zum betrachteten Monitor, zum wartenden und ggf. den benachrichtigten Threads sowie zur Methodenlokation, wo die Monitoroperation stattfand.
Shared Lock Trace
Aktivitäten, die im Shared Lock Trace aufgezeichnet wurden, haben die Form
"shared lock <Sperrname> <Sperrtyp> enter" oder "shared lock <Sperrname> <Sperrtyp> leave"
und bezeichnen den Erhalt bzw. die Freigabe einer VM-übergreifenden Sperre.
Nach Einfachklick auf eine Ergebniszeile erscheint im unteren Teil ein Bild mit Detailinformationen zur betrachteten Sperroperation, zum Thread und zur Methodenlokation, wo die Operation stattfand.
Weitere Informationen