Donnerstag Dez 19, 2013

ECID - Execution Context ID im Enterprise Manager Cloud Control

Der folgende Artikel beschreibt die Oracle Execution Context ID kurz ECID und wie der Oracle Enterprise Manager Cloud Control 12c R3 die ECID für Diagnose von Applikations-Problemen verwenden kann.

Was ist die Execution Context ID (ECID)?

Die ECID ist eine globale, eindeutige Kennzeichnung eines initialen Requests in der Fusion Middleware. Diese ID wird an alle nachfolgenden Oracle-Instanzen unverändert übergeben und ermöglicht eine durchgehende Verfolgung über verschiedenen Oracle-Instanzen. Die ECID ist sehr hilfreich beim Auffinden von Problemen im gesamten Oracle Stack.


Die ECID ist keine neues Feature der aktuellen FMW-Version, sondern existiert schon seit dem Oracle Application Server 10g (OC4J). Die ECID ist nicht nur im Oracle FMW-Kontext sichtbar, sondern auch in Oracle-Datenbanken (z. B. in den V$SESSION oder V$ACTIVE_SESSION_HISTORY View)


Die ECID ist ein Feature des Oracle Fusion Middleware Dynamic Monitoring Service (DMS). Der DMS ermöglicht der Oracle FMW die Bereitstellung von Monitoring-Daten, um diese z. B. im Oracle Enterprise Manager weiterzuverarbeiten. Der DMS wird vom Oracle WebCache, Oracle HTTP Server, Oracle Application Development Framework (ADF), Weblogic Diagnostic Framework (WLDF) und JDBC verwendet.


Wie kann man die ECID verwenden, um z. B. ein Performance Bottleneck innerhalb einer komplexen Applikation zu finden?


Man kann z. B. manuell in den Log-Dateien bzw. Datenbanken der verschiedenen beteiligten Komponenten suchen und diese in zeitlichen Ablauf stellen. An den Laufzeiten der beteiligten Threads lässt sich erkennen, an welcher Stelle die meiste Zeit in der Verarbeitung des Requests verbraucht wird.

ECID Performance Analyse mit dem Oracle EM12c

Wenn man den Oracle Enterprise Manager Cloud Control 12c im Einsatz hat, kann man die Request-Verfolgung über das GUI im Kontext mit wenigen Klicks grafisch darstellen. Der nachfolgende Artikel gibt eine Einführung, wie man die ECID im EM12c verwenden kann, um Laufzeiten der einzelnen Threads im Kontext des Requests darzustellen.  


Bevor die ECID verwendet werden kann, müssen folgende Voraussetzungen erfüllt sein:

  1. Das Ziel muss eine Fusion Middleware Installation sein, nur ein Stand-Alone WebLogic-Server Domäne erfüllt die Voraussetzungen nicht. Grund hierfür sind die sogenannten Java Requested Files (JRF). Diese sind nicht in einer WLS Stand-Alone Installation vorhanden. Man kann die JRF Files auf einen WebLogic Server hinzufügen indem man z. B. das Application Development Framework (ADF) hinzuinstalliert.
  2. Die FMW-Installation muss JRF-Enabled sein, dies kann man prüfen, indem man im EM12c in der gewünschte FMW-Instanz (Domäne) unter dem WebLogic-Server/Domain-Menü -> Target Setup -> die Monitoring Configuration aufruft. Der Parameter "Is JRF Enabled?" muss auf "true" stehen.


Bild 1: Überprüfung JRF Enabled = true


Das folgende Beispiel wurde auf einer EM12c R3-Installation mit dem FMW-Plug-In 12.1.0.5 erstellt.


Auswahl der ECID zur detaillierten Analyse
Die Auswahl der ECID erfolgt unter dem Menüpunkt Targets -> Middleware -> Middleware Features -> Request Instance Diagnostics dann auf den Button Select ECID drücken.


In dem Suchfenster können zahlreiche Einschränkungskriterien eingegeben werden. Es empfiehlt sich nicht nur den Suchzeitraum, sondern auch die Ziele einzuschränken. Durch Drücken des Buttons Search wird die Suchanfrage abgesendet. Die Ergebnisse können durch Drücken auf die jeweilige Spaltenüberschrift sortiert werden z. B. nach der Thread-Laufzeit in Millisekunden.



Bild 2: Suche nach einer ECID, Auswahl nach der längsten Laufzeit


In diesem Fall wähle ich die ECID mit der längsten Laufzeit (8 Sekunden) aus und drücke Select.


Im nachfolgenden Bild sind alle Threads aufgelistet, die zu der gewählten ECID gehören. Wie man sieht, handelt es sich hierbei um eine Kombination von verschiedenen Threads. Mann kann jetzt z. B. die Spalte Duration (ms) nach den Laufzeit ordnen,  die verwendeten SQL-Statements einsehen oder nach CPU-Auslastung, Speicherverbrauch, Garbage-Collection etc. ordnen, um Performance-Bottlenecks aufzudecken.


!TIP: Das Ergebnisfenster, in dem die Threads dargestellt werden, bekommt teilweise erst durch das Vergrößern einen Scroll-Balken, daher kann es gut sein, dass zu der ECID mehr Threads gehören, als auf den ersten Blick erscheinen. Am besten mit der Maus einen Thread fokussieren und dann Scrollen oder die Targets Tabelle vergrößern.



Bild 3: Anzeige der Threads, die zu der ausgewählten ECID gehören


Wenn man das SQL von einem bestimmten Thread sehen möchte, klickt man auf das SQL Statement in der Tabelle und erhält die nachfolgende Ansicht:



Bild 4: Detaillierte SQL-Statment Ansicht


Eine detaillierte Sicht auf den Aufrufpfad (Stack Thread) erhält man, indem man den gewünschten Thread in der Tabelle auswählt und im unteren Bereich der Webseite Thread Stack Details auswählt. Diese Details stellen den Aufrufpfad des Threads dar und dienen dazu, z. B. die exakte Position innerhalb des eignen JAVA-Codes zu ermitteln, an dem der Methoden-Aufruf initiiert wird. Es werden in der Detailansicht der Dateiname und die Zeilennummer des Methodenaufrufs angezeigt. Dieses schließt die Systemaufrufe mit ein, es ist aber möglich anhand der Dateinamen zu unterscheiden, ob es sich um einen Systemaufruf oder eine eigene Klasse handelt.



Bild 5: Methoden-Aufruf-Hierachie Darstellung


Der untere Bereich der Request Instance Diagnostic-Seite enthält zusätzliche Informationen bezüglich des Systemverhaltens während der Abarbeitung der ECID. Das Instance Sample z. B. zeigt an in welchem Zustand der Threads (bzw. die Sub-Threads) während der Messung war.
Die Zustände haben folgende Bedeutung:

  • RMI Wait - der Thread wartet auf eine RMI event z. B. auf einen nicht TCP-basierenden Aufruf
  • IO Wait - der Thread wartet auf IO z. B. Festplattenzugriff
  • Network Wait - der Thread wartet auf Netzwerkzugriff z. B. auf eine Aktion auf einer Webseite
  • DB Wait - der Thread wartet auf eine Datenbank-Aktion z. B. das Beenden eines SQL-Statements
  • Runnable - der Thread belegt die CPU und bearbeitet einen Task (Er kann aber auch im Wartezustand sein, z. B. durch eine Ressourcenverteilung des Betriebssystems)
  • Lock - der Thread belegt eine Ressource und hindert somit andere Threads daran, diese Ressource zu verwenden

Wählt man den Reiter Request Aggregate aus, erhält man die Systemzustände der ausgewählten Metrikgruppen während der Laufzeit des ECID-Threads. Zum Beispiel kann man sich anschauen, wie sich der Host verhalten hat, während die ECID abgearbeitet wurde. Dies ist sehr hilfreich, um Performance-Engpässe zu finden, die nicht unbedingt durch die FMW direkt verursacht wurden. Ein Beispiel hierfür sind Host-Operationen, die von externen Progammen auf dem FMW-Host durchgeführt werden und dadurch der FMW-Applikation Ressourcen entziehen.



Bild 6: Aggregate Zustände der Datenbank wärend der Abarbeitung der ECID


Wählt man der Reiter JVM Metrics werden die JVM Metriken und Threads-States in der gesamtem Laufzeit der ECID angezeigt. Dies dient der Übersicht und ist eine gute Stelle, um eine detaillierte Einsicht in das Verhalten der JVM innerhalb der ECID-Laufzeit zu bekommen. In dem  gezeigten Beispiel sieht man, dass die Anzahl der Threads im DB-Wait-Status linear ansteigen. In diesem Fall lohnt es sich detaillierter in die SQL Statements zu schauen und diese ggf. zu tunen.



Bild 7: Thread Zustände während der ECID Abarbeitung


Möchte man sich einen einzelnen Thread aus der Target-Liste anschauen, um z. B. detaillierte Informationen über die Gründe der langen Laufzeit zu bekommen, wählt man diesen aus und klickt auf Thread Sample Inspector im unteren Bereich der Webseite. Der Thread Sample Inspector zeigt viele Informationen zu dem ausgewählten Thread an.

!TIP: Mann kann den Aufruf-Stack auch in Excel exportieren, um diesen z. B. an Entwickler zu geben, wenn diese keinen direkten Zugriff auf das System haben.



Bild 8: Single Thread Detail-Ansicht


Wenn man z. B. einen Thread hat, der einen DB Wait-Status hat, kann man durch klicken auf die SQL_Id in die Anzeige der SQL-Details der Datenbank navigieren, um z. B. mittels SQL-Worksheet das Statement zu tunen.



Bild 9: SQL-Ansicht in der Datenbank-Diagnose


Zusammenfassung
Die ECID-Funktionalität ist eine performante und durchgängige Möglichkeit, um Probleme innerhalb der Oracle-Welt schnell und mit geringem Aufwand zu finden. Durch das Verwenden des EM12c ist dies auf grafischer Ebene und mit geringen Aufwand möglich. Der EM12c führt alle beteilligten Komponenten zusammen und ermöglicht ein durchgängiges Konzept, um mit Problemen innerhalb von Threads umzugehen.




About

Dieser deutschsprachiger Blog behandelt alle Themen rund um Oracle Middleware Management mit dem Oracle Enterprise Manager 12c.

Search

Archives
« März 2015
MoDiMiDoFrSaSo
      
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
     
Heute