Identity Manager besitzt ein Profilerdienstprogramm, das Ihnen in Ihrer Bereitstellung beim Auffinden von Leistungsproblemen bei Formularen, Java, Regeln, Arbeitsabläufen und XPRESS hilft.
Formulare, Java, Regeln, Arbeitsabläufe und XPRESS können Leistungs- und Skalierungsprobleme verursachen. Der Profiler analysiert, wieviel Zeit diese verschiedenen Bereiche zur Ausführung benötigen. Somit können Sie feststellen, ob sie zu Leistungs- und Skalierungsproblemen beitragen und – wenn dies der Fall ist – welche Teile dieser Objekte diese Probleme verursachen.
In diesem Abschnitt wird die Arbeit mit dem Identity Manager-Profiler beschrieben. Darüber hinaus finden Sie hier eine Anleitung für das Finden und Eliminieren von Leistungsproblemen in Ihrer Bereitstellung.
Die Informationen sind wie folgt unterteilt:
Der Identity Manager-Profiler wird erst ab Version 7.1 Update 1 unterstützt.
Dieser Abschnitt enthält eine Übersicht der Leistungsmerkmale und Funktionalität des Identity Manager-Profilers. Die Informationen sind wie folgt unterteilt:
Mit dem Profiler können Sie folgende Funktionen ausführen:
Erstellen von „Snapshots“ für Profiling-Daten
Unter einem Snapshot versteht man die kumulative Gesamtheit der Profilingdaten seit dem letzten Löschen aller gesammelten Profilermessergebnisse.
Snapshotergebnisse können in vier verschiedenen Datenansichten dargestellt werden:
Ansicht der Aufrufhierarchie - zeigt eine Hierarchieansicht mit den Aufrufzeiten und -dauern im gesamten System an.
Hotspot-Ansicht - zeigt eine flache Knotenliste mit den aufsummierten Aufrufzeiten unabhängig von der aufrufenden Routine an.
Rückverfolgungsansicht - zeigt einen invertierten Aufrufstack mit allen Aufrufketten, von denen ein bestimmter Knoten (der sog. Root-Knoten) aufgerufen wurde, an.
Ansicht der aufgerufenen Routinen - zeigt eine Gesamtaufrufhierarchie für den Root-Knoten (unabhängig von dessen aufrufender Kette) an.
Sie müssen angeben, welche Informationenen im Snapshot enthalten sein sollen.
Sie können alle Elemente von Formularen, Arbeitsabläufen und XPRESS-Objekten angeben oder den Inhalt auf eine bestimmte Menge spezifischer Elemente beschränken.
Sie können festlegen, welche Java-Methoden und -Konstruktoren mit dem Profiling analysiert werden sollen. Die Instrumentierung von Identity Manager- und benutzerspezifischen Klassen wird unterstützt.
Sie sollten Ihre Projekt-Snapshots wie folgt verwalten.
Speichern Sie den Snapshot im Verzeichnis nbproject/private/idm-profiler Ihres Projekts oder in einem beliebigen anderen Verzeichnis außerhalb Ihres Projekts.
Im Abschnitt „Saved Snapshots“ der IDM-Profileransicht können Sie sich eine Liste aller gespeicherten Snapshots anzeigen lassen.
Sie können Snapshots innerhalb Ihres Projekts oder aus einem anderen Verzeichnis außerhalb Ihres Projekts heraus öffnen.
Sie können Snapshots löschen.
Sie können bestimmte Knoten nach Namen suchen:
In diesem Abschnitt wird beschrieben, wie der Profiler Quellcode für die folgenden Identity Manager-Objekte findet und verwaltet:
In der Aufrufhierarchie- bzw. Hotspot-Ansicht können Sie auf einen Knoten, der einer Java-Methode, einem Arbeitsablauf, einem Formular, einer Regel oder einem XPRESS-Objekt entspricht, doppelklicken.
Wenn Sie mit dem Profiler einen Snapshot erstellen, evaluiert der Server alle Profilingdaten und findet heraus, von welchem Quellcode die betreffenden Daten abhängen. Der Server ruft dann diesen Quellcode aus dem Repository ab und fügt ihn in den Snapshot ein. Deswegen können Sie sicher sein, dass die in einem Snapshot angezeigten Identity Manager-Objekte auch wirklich den Zustand besitzen, den sie während der Erstellung des Snapshot einnahmen.
Dieser Prozess erhöht zwar die Snapshotgröße, die Quellcodegröße beträgt aber nur einen Bruchteil der Gesamtobjektgröße. So können Sie Snapshots an den Technischen Support von Sun senden, ohne einzelne Dateien schicken zu müssen.
Wenn Sie einen Snapshot von Java-Quellcode erstellen, lädt der Client den Snapshot herunter und sucht dann in diesem Snapshot alle referenzierten Java-Quellen aus dem Projekt heraus. Beim Speichern des Snapshots komprimiert und archiviert der Client den Quellcode und hängt ihn an das Ende des Snapshots an.
Wenn Sie dann den Snapshot anzeigen und zum Java-Quellcode gehen, überprüft der Client zunächst den Inhalt des Snapshots. Wenn der Client den Inhalt dort nicht finden kann, überprüft er den Projektinhalt. Dieser Vorgang ermöglicht das Senden eines Snapshots mit Profiling-Daten aus benutzerspezifischem Java-Code und Identity Manager-Code.
Bei Snapshots aus Java-Quellcode kann nicht vorausgesetzt werden, dass die der Code mit dem Server auf dem aktuellsten Stand bzw. stets verfügbar ist.
Die folgenden Abschnitte enthalten Informationen, die bei der Auswertung der vom Profiler ermittelten Ergebnisse zu berücksichtigen sind.
Zur Berechnungen der Eigenausführungszeit eines Root-Knotens subtrahiert der Profiler die Ausführungszeiten aller vom Root-Knoten aufgerufenen Routinen von der Gesamtausführungszeit des Knotens ab.
Deswegen fließt die Ausführungszeit eines uninstrumentierten, vom Root-Knoten aufgerufenen Knotens in die Eigenausführungszeit des Root-Knotens ein Wenn die Eigenausführungszeit eines Root-Knotens relativ groß ist, sollten sie der Ursache unbedingt nachgehen. Es könnte beispielsweise sein, dass Sie nicht die passenden Methoden analysieren und deswegen an der falschen Stelle suchen.
Nehmen wir z. B. an, dass Methode-A Methode-B aufruft.
Die Ausführungszeit von Methode-A beträgt insgesamt 10-s (dies schließt den Aufruf von B ein) und der Aufruf von B dauert insgesamt 10-s.
Wenn sowohl Methode-A als auch Methode-B instrumentiert sind, wird dies im Aufrufstack festgehalten. Sie sehen, dass Methode-A eine Eigenausführungszeit von 0-s und B von 10-s besitzt. Das heißt, die gesamten 10-Sekunden wurden in Methode-B verbracht). Wenn B jedoch nicht instrumentiert ist, sehen Sie nur, dass der Aufruf von Methode-A 10-s dauert und die Eigenausführungszeit von Methode-A 10-s beträgt. So kann es sein, dass Sie annehmen, dass das Problem statt in Methode-B in Methode-A liegt.
Ihnen fällt vielleicht auf, dass die Eigenausführungszeiten von JSPs während der Erstcompilierung sehr hoch sind. Wenn Sie die erfassten Ergebnisse löschen und die Seite dann erneut anzeigen, ist der Wert für die Eigenausführungszeit bedeutend niedriger.
Wegen vorhandener Einschränkungen bei der Java-Instrumentierungsstrategie erscheinen Erstaufrufe to this() oder super() auf der gleichen Aufrufebene wie der Konstruktor statt darunter. Hierzu ein Beispiel:
class A { public A() { this(0); } public A(int i) { } } and: class B { public static void test() { new A(); } } The call tree will look like this: B.test() -A.<init>(int) -A.<init>() Rather than this: B.test() -A.<init>() -A.<init>(int) |
Lassen Sie sich nicht von einer scheinbar langen Zeit verwirren, die in Dämon-Threads von Identity Manager (z.-B. ReconTask.WorkerThread.run() oder TaskThread.WorkerThread.run()) verbracht wurde. Die meiste Zeit hier wird im Leerlauf, d.-h. mit dem Warten auf Ereignisse verbracht. Sie müssen diese Aufrufe näher untersuchen, um zu sehen, wieviel Zeit in solchen Threads beim eigentlichen Auftreten eines Ereignisses verbracht wird.
In diesem Abschnitt wird beschrieben, wie Sie den Profiler starten und wie Sie mit den einzelnen Funktionen der grafischen Benutzeroberfläche des Profilers arbeiten. Die Informationen sind wie folgt unterteilt:
Da der Profiler sehr speicherintensiv ist, sollten Sie die Speicherressourcen für den Server und die Netbeans Java Virtual Machine (JVM) erhöhen.
So erhöhen Sie Speicherressourcen für den Server:
Öffnen Sie das Netbeans-Fenster und klicken Sie auf die Registerkarte „Laufzeit“.
Klappen Sie den Serverknoten auf, klicken Sie mit der rechten Maustaste auf „Bundled Tomcat“ und wählen Sie aus dem Menü „Eigenschaften“.
Demarkieren Sie in der Registerkarte „Verbindung“ das Kontrollkästchen „HTTP-Monitor aktivieren“, wenn das Dialogfeld „Server Manager“ angezeigt wird.
Klicken Sie auf die Registerkarte „Plattform“ und setzen Sie die VM-Optionen auf -Xmx1024M.
So erhöhen Sie Speicherressourcen für die Netbeans JVM:
Öffnen Sie die Datei Netbeans-InstallationsVerz\etc\netbeans.conf und suchen Sie die folgende Zeile:
netbeans_default_options="-J-Xms32m -J-Xmx ...
Setzen Sie den Wert -J-Xmx auf -J-Xmx 1024M.
Speichern und schließen Sie die Datei.
Nach Abschluss dieses Vorgangs können Sie den Profiler wie im nächsten Abschnitt beschrieben starten.
Der Profiler kann aus dem Identity Manager-IDE-Fenster mit einer der folgenden Methoden gestartet werden:
Klicken Sie auf das Symbol „Start Identity Manager Profiler on Main Project“ auf der Menüleiste.
Das Symbol „Start Identity Manager Profiler on Main Project“ ist aktiviert, wenn das Identity Manager-Projekt die Version 7.1 Update 1 oder höher hat.
Wählen Sie in der Menüleiste „Window > IDM Profiler“.
Im Explorer-Fenster wird das Fenster „Identity Manager Profiler“ angezeigt. Wählen Sie in diesem Fenster ein Identity Manager-Projekt im Dropdown-Menü „Current Project“ aus, dann klicken Sie auf das Symbol „Start Identity Manager Profiler“ im Bereich „Controls“.
Klicken Sie mit der rechten Maustaste auf ein Projekt im Projektfenster und wählen Sie anschließend im Popup-Menü „Start Identity Manager Profiler“.
Wählen Sie ein Projekt im Projektfenster aus und wählen Sie anschließend in der Menüleiste „IdM > Start Identity Manager Profiler“.
Nach dem Start des Profilers wird das Dialogfeld „Profiler Options“ angezeigt, sodass Sie die von Ihnen gewünschten Optionen für das Profiling einstellen können. Eine Anleitung zum Einstellen dieser Optionen finden Sie im Abschnitt Festlegen von Optionen für das Profiling.
In diesem Abschnitt werden die Funktionen der grafischen Benutzeroberfläche des Profilers beschrieben und wie Sie mit diesen arbeiten können. Die Informationen sind wie folgt unterteilt:
Das Dialogfeld „Profiler Options“ enthält folgende Registerkarten:
Mit den Optionen in diesen Registerkarten legen Sie fest, für welche Objekte das Profiling ausgeführt werden soll und welche Elemente im Profil anzuzeigen sind.
Klicken Sie auf „OK“, um den Profiler zu starten, wenn Sie die Optionen für das Profiling festgelegt haben. Je nach Projektkonfiguration führt der Profiler einen der folgenden beiden Vorgänge aus:
Bei regulären Identity Manager-Projekten mit einer eingebetteten Identity Manager-Instanz führt der Profiler ein vollständiges Build durch, stellt das Projekt auf dem NetBean-Anwendungsserver bereit und startet den Profiler.
Bei regulären Identity Manager-Projekten mit einer externen Identity Manager-Instanz oder Identity Manager-Fernprojekten verbindet sich der Profiler mit der für das Projekt konfigurierten Identity Manager-Instanz.
Sie können „IdM > Set Identity Manager Instance“ auswählen, um die Aktion der Identity Manager-Instanz für das Projekt festzulegen.
Die Registerkarte „Mode“ enthält folgende Optionen:
IDM Objects Only: Wählen Sie diese Option, um das Profiling für Formulare, Regeln, Arbeitsabläufe und XPRESS-Objekte durchzuführen. Es wird kein Profiling für Java-Objekte ausgeführt.
Java and IDM Objects: Wählen Sie diese Option, um das Profiling für Formulare, Java, Regeln, Arbeitsabläufe und XPRESS-Objekte durchzuführen.
Die Option „Java and IDM Objects“ ist für reguläre Identity Manager-Projekte mit externer Identity Manager-Instanz bzw. Identity Manager-Fernprojekte nicht verfügbar.
Sie können den Modus nicht ändern, während das Profiling läuft. Wenn Sie den Modus ändern möchten, muss der Profiler angehalten werden.
Die Registerkarte „IDM Object Filters“ enthält folgende Optionen:
Show IDM Object details
Markieren Sie dieses Kontrollkästchen, um alle Formulare, Arbeitsabläufe und XPRESS-Elemente, die ausgeführt werden, in den Snapshot einzubeziehen.
Demarkieren Sie dieses Kontrollkästchen, wenn nur die folgende Elemente im Snapshot enthalten sein sollen:
<invoke>
<new>
<Rule>
<Form>
<WFProcess>
<ExScript>
<ExDefun>
<FieldRef>
<Action> (für Zusatzaktionen von Arbeitsablauf-Anwendungen)
Einbeziehen von anonymem Quellcode
Unter anonymen Quellcode versteht man Formulare (oder Teile davon), die dynamisch generiert werden (z.-B. Anmeldeformulare oder Formulare, die auf fehlende Felder hinweisen) und keinem der persistenten Formulare im Identity Manager-Repository entsprechen.
Markieren Sie dieses Kontrollkästchen, wenn anonymer Quellcode in den Snapshot einbezogen werden soll.
Demarkieren Sie dieses Kontrollkästchen, wenn kein anonymer Quellcode im Snapshot enthalten sein soll.
In der Registerkarte „Java Filters“ können Sie:
Java-Filter einbeziehen bzw. ausschließen
neue Filter erstellen
vorhandene Filter löschen
Standardfilter wiederherstellen
Java-Filter sind in Bezug auf Methodenmuster gegeben und werden in ein- bzw. ausschließenden, auf dem kanonischen Methodennamen basierenden Mustern angegeben. Kanonische Methodennamen sehen wie folgt aus:
Klassenname_mit_vollständigem_Pfad.Methodenname(Parametertyp-1, Parametertyp-2, ...)
Für Konstruktoren lautet der Methodenname <init>.
Hier sind einige Beispiele:
Zum Ausschließen von Konstruktoren markieren Sie das Kontrollkästchen „Exclude“ und fügen den folgenden Filter hinzu:
*.<init>(*)
Zum Ausschließen aller Konstruktoren mit einem einzigen Parameter org.w3c.dom.Element markieren Sie das Kontrollkästchen „Exclude“ und fügen den folgenden Filter hinzu:
*.<init>(org.w3c.dom.Element)
Zum Ausschließen aller Identity Manager-Klassen markieren Sie das Kontrollkästchen „Exclude“ und fügen die folgenden Filter hinzu:
"com.waveset.*" "com.sun.idm.*"
Wenn Sie nur benutzerspezifischen Code instrumentieren wollen, deaktivieren Sie das Kontrollkästchen „Exclude“, entfernen den Filter * include zu Beginn und fügen dann den folgenden Filter hinzu:
"com.yourcompany.*"
Die letzten beiden Beispiele haben gegenwärtig den gleichen Effekt, da Filter nur auf benutzerspezifische Klassen und Identity Manager-Klassen angewendet werden.
Falls erforderlich, können Sie durch entsprechendes Ändern der folgenden Zeilen in der Datei build.xml noch andere JAR-Dateien instrumentieren. Zum Beispiel:
<instrument todir="${lighthouse-dir-profiler}/WEB-INF" verbose="${instrumentor.verbose}" includeMethods="${profiler.includes}" excludeMethods="${profiler.excludes}"> <fileset dir="${lighthouse-dir}/WEB-INF"> <include name="lib/idm*.jar"/> <include name="classes/**/*.class"/> </fileset> </instrument> |
Standardmäßig sind in der Konfiguration alle benutzerspezifischen und die meisten Identity Manager-Klassen enthalten. Eine Reihe von Identity Manager-Klassen sind zwangsläufig nicht enthalten, da deren Einbeziehung den Profiler funktionsunfähig machen würde.
So sind z.-B. Klassen aus den Arbeitsablauf-, Formular- und XPRESS-Programmen nicht enthalten, da der Profiler beim Profiling von Java- und Identity Manager-Objekten unverständliche Ausgaben generieren würde.
Bitte beachten Sie, dass Java-Filter eine erheblich feinere Filtergranularität als IDM-Objektfilter bieten. Java-Instrumentierungen verlangsamen die Ausführungszeit erheblich, was bei den Profiling-Ergebnissen zu drastischen Abweichungen führen kann. Da Identity Manager-Objekte interpretiert und nicht kompiliert werden, kann der Einfluss der Instrumentierung auf die Ausführungszeit vernachlässigt werden. So gibt es beispielsweise keinen Grund, Arbeitsablauf-A auszuschließen und Arbeitsablauf-B einzubeziehen usw.
Sie können Java-Filter nicht ändern, während das Profiling läuft. Wenn Sie die Java-Filter ändern möchten, muss der Profiler angehalten werden.
Die Registerkarte „Miscellaneous“ enthält folgende Optionen:
Prune snapshot nodes where execution time is 0:
Deaktivieren Sie die Option (standardmäßig deaktiviert), wenn der Snapshot Aufrufdaten für alle ausgeführten Entitäten (auch für die, deren Ausführungszeit 0 ist) enthalten soll.
Unter Umständen ist die Verfolgung der Aufrufanzahl bei Knoten nützlich, deren Ausführungszeit gleich null ist.
Aktivieren Sie diese Option, um diese Knoten auszuschließen. Damit können Sie sich auf die relevantesten Profiling-Daten konzentrieren. Darüber hinaus kann durch Aktivieren dieser Option die Größe eines Profiler-Snapshots erheblich reduziert werden.
Automatically Open Browser Upon Profiler Start:
Aktivieren Sie diese Option (standardmäßig aktiviert), wenn beim Start des Profilers automatisch ein Browser geöffnet werden soll, in dem die Identity Manager-Instanz angezeigt wird, für die das Profiling ausgeführt wird.
Deaktivieren Sie diese Option, wenn kein Browser geöffnet werden soll.
Include Java Sources in Snapshot:
Aktivieren Sie diese Option (standardmäßig aktiviert), wenn Java-Quellcode für alle Java-Methoden enthalten sein soll, die im Snapshot der Profiling-Daten referenziert werden sollen. Diese Einstellung sollte stets für Snapshots unter Produktionsbedingungen verwendet werden. Benutzerspezifischer Java-Code ist beansprucht wenig Ressourcen, und es wichtig, diesen für die Fehlersuche zur Verfügung zu haben.
Deaktivieren Sie diese Option, wenn Sie das Profiling für Identity Manager durchführen und der vollständige Identity Manager-Quellcode verfügbar ist.
In solchen Fällen sollte der Identity Manager-Quellcode nicht in den Snapshots enthalten sein, da dadurch die Snapshot-Größe extrem erhöht wird. (Weitere Informationen finden Sie unter Wie findet und verwaltet der Profiler Quellcode.)
Die IDM-Profileransicht enthält die folgenden Bereiche:
Der Bereich „Current Project“ besteht aus einem Dropdown-Menü, in dem alle aktuellen Projekte aufgeführt sind. In diesem Menü wählen Sie das Projekt aus, für das ein Profiling durchgeführt werden soll.
Der Bereich „Controls“ enthält vier Symbole. Diese sind in der folgenden Tabelle beschrieben:
Symbol |
Name |
Zweck |
---|---|---|
|
Start Identity Manager Profiler |
Startet den Profiler und öffnet das Dialogfeld „Profiler Options“. |
|
Stop Identity Manager Profiler |
Stoppt den Profiler. |
|
Reset Collected Results |
Löscht alle bis hierhin erfassten Profiling-Ergebnisse. |
|
Modify Profiling |
Öffnet das Dialogfeld „Profiler Options“ erneut, sodass Sie an den Einstellungen Änderungen vornehmen können. |
Im Bereich „Status“ wird gemeldet, ob der Profiler mit dem Host eine Verbindung herstellen konnte, und es werden Informationen zum Starten, Laufen und Stoppen des Profilers angezeigt.
Der Bereich „Profiling Results“ enthält zwei Symbole. Diese sind in der folgenden Tabelle beschrieben:
Symbol |
Name |
Zweck |
---|---|---|
|
Start Identity Manager Profiler |
Startet den Profiler und öffnet das Dialogfeld „Profiler Options“. |
|
Reset Collected Results |
Löscht alle bis hierhin erfassten Profiling-Ergebnisse. |
Der Bereich „Saved Snapshots“ enthält eine Liste aller gespeicherten Snapshots.
Eine Anleitung zum Speichern von Snapshots finden Sie im Abschnitt Speichern eines Snapshots.
Darüber hinaus dienen die folgenden Schaltflächen zum Verwalten dieser Snapshots:
Open: Klicken Sie auf diese Schaltfläche, um einen gespeicherten Snapshot im Fenster „Snapshot View“ zu öffnen.
Sie können auch auf einen Snapshot in dieser Liste doppelklicken, um ihn zu öffnen.
Delete: Wählen Sie einen Snapshot in der Liste „Saved Snapshots“ aus und klicken auf diese Schaltfläche, um den Snapshot zu löschen.
Save As: Wählen Sie einen Snapshot in der Liste aus und klicken Sie auf diese Schaltfläche, um den Snapshot in einem beliebigen externen Verzeichnis zu speichern.
Load: Klicken Sie auf diese Schaltfläche, um einen in einem beliebigen externen Verzeichnis gespeicherten Snapshot im Fenster „Snapshot View“ zu öffnen.
Beim Öffnen eines Snapshots werden die Ergebnisse in der Snapshot-Ansicht angezeigt. Diese befindet sich rechts oben in der Identity Manager-IDE.
Ein Snapshot bietet verschiedene Anzeigemöglichkeiten für Profiling-Daten. Diese werden in den folgenden Abschnitten beschrieben:
Die Ansicht der Aufrufhierarchie zeigt eine Hierarchieansicht mit den Aufrufzeiten und -dauern im gesamten System an.
Diese Tabelle enthält drei Spalten:
Spalte „Call Tree“: Hier werden alle Knoten aufgeführt.
Knoten der obersten Ebene können folgende Entitäten sein:
Thread.run()-Methoden für verschiedene Hintergrund-Threads im System
Wenn Sie beispielsweise Java-Profiling aktiviert haben, sehen Sie hier die Methode ReconTask.WorkerThread.run().
Zeitdauern für Anforderungen
Wenn Sie beispielsweise die URL idm/login.jsp angezeigt haben, sehen Sie in der obersten Ebene einen Eintrag für idm/login.jsp. Die Spalte „Time“ zeigt die Gesamtzeit, die für diese Anforderung (bzw. Anforderungen) benötigt wurde. Die Spalte „Invocations“ zeigt, wie oft diese Seite insgesamt aufgerufen wurde. Sie können diese Daten näher untersuchen, um festzustellen, welche Aufrufe zur Gesamtzeit beigetragen haben.
Die Ansicht der Aufrufhierarchie enthält darüber hinaus Knoten mit Eigenausführungszeiten. Unter Eigenausführungszeit versteht man die Zeit, die ein Knoten für seine eigene Ausführung benötigt. (Weitere Informationen dazu finden Sie unterInterpretationshinweise zu den Statistiken.)
Spalte „Time“: Die Zeit, die in jedem Knoten verbracht wurde, als dieser Knoten von seiner übergeordneten Routine aufgerufen wurde. Die Werte sind Prozentsätze relativ zur Ausführungszeit der aufrufenden Routine.
Spalte „Invocations“: Hält fest, wie oft jeder Knoten von seiner übergeordneten Routine aufgerufen wurde.
Die Hotspot-Ansicht zeigt eine flache Knotenliste mit den aufsummierten Aufrufzeiten unabhängig von der aufrufenden Routine an.
Diese Ansicht enthält die folgenden Spalten:
Self Time: Die Gesamtzeit, die in jedem Knoten verbracht wurde.
Invocations: Hält fest, wie oft jeder Knoten insgesamt von seiner übergeordneten Routine aufgerufen wurde.
Time: Die Gesamtzeit, die in jedem Knoten und in allen von diesem Knoten aufgerufenen Unterroutinen verbracht wurde.
Die Rückverfolgungsansicht zeigt einen invertierten Aufrufstack mit allen Aufrufketten, von denen jeder Knoten aufgerufen wurde, an.
Mit diesen Statistikdaten können Sie nachvollziehen, wie viel Zeit Sie durch Eliminierung einer bestimmten Aufrufkette aus dem betreffenden Knoten einsparen würden?
Sie können die Rückverfolgungsansicht von allen anderen Snapshot-Ansichten aufrufen, indem Sie mit der rechten Maustaste auf einen Knoten klicken (der dann in der Rückverfolgungsansicht zum sog. Root-Knoten wird) und aus dem Kontextmenü die Option „Show Back Traces“ auswählen.
In der Rückverfolgungsansicht haben die Werte in den Spalten „Time“ und „Invocations“ eine andere Bedeutung:
Time: Die Werte in dieser Spalte geben die Zeit an, die im Root-Knoten verbracht wurde, wenn dieser von einer bestimmten Aufrufkette aufgerufen wird.
Invocations: Die Werte in dieser Spalte geben an, wie oft der Root-Knoten von einer bestimmten Aufrufkette aus aufgerufen wurde.
Die Ansicht der aufgerufenen Routinen zeigt eine Gesamtaufrufhierarchie für einen Knoten (den sog. Root-Knoten) unabhängig von dessen aufrufender Kette an.
Diese Statistikdaten sind bei Problembereichen nützlich, die innerhalb der Masterhierarchie von vielen Routinen aufgerufen werden, und wo Sie sich das Gesamtprofil des betreffenden Knotens ansehen möchten.
Sie können die Ansicht der aufgerufenen Routinen von allen anderen Snapshot-Ansichten aufrufen, indem Sie mit der rechten Maustaste auf einen Knoten klicken (der dann in der Rückverfolgungsansicht zum sog. Root-Knoten wird) und aus dem Kontextmenü die Option „Show Callees“ auswählen.
In der Ansicht der aufgerufenen Routinen haben die Werte in den Spalten „Time“ und „Invocations“ die gleiche Bedeutung wie bei der Ansicht der Aufrufhierarchie.
Klicken Sie in der Ansicht der Aufrufhierarchie bzw. in der Hotspot-Ansicht mit der rechten Maustaste auf einen beliebigen Knoten. Es wird ein Kontextmenü mit den in der folgenden Tabelle beschriebenen Optionen angezeigt:
Menüoption |
Beschreibung |
---|---|
GoTo Source |
Wählen Sie diese Option zur Anzeige des XML-Quellcodes für einen Knoten, der einer Java-Methode, einem Arbeitsablauf, Formular, einer Regel oder einem XPRESS-Objekt entspricht. Ausführliche Informationen zu dieser Ansicht finden Sie unter Wie findet und verwaltet der Profiler Quellcode. |
Show Back Traces |
Wählen Sie diese Option, um zur Rückverfolgungsansicht zu schalten. Ausführliche Informationen zu dieser Ansicht finden Sie unterRückverfolgungsansicht. |
Show Callees |
Wählen Sie diese Option, um zur Ansicht der aufgerufenen Routinen zu schalten. Ausführliche Informationen zu dieser Ansicht finden Sie unterAnsicht der aufgerufenen Routinen. |
Find In Hotspots |
Wählen Sie diese Option, um in der Hotspot-Ansicht einen Knoten zu suchen. Ausführliche Informationen zu dieser Ansicht finden Sie unterHotspot-Ansicht. |
List Options > Sort > |
Wählen Sie diese Option, um den Sortiermodus festzulegen. Sortierung nach:
|
List Options > Change Visible Columns |
Wählen Sie diese Option, um die angezeigten Tabellenspalten in der Ansicht der Aufrufhierarchie bzw. Hotspot-Ansicht zu ändern. Im Dialogfeld „Change Visible Columns“ können Sie eine oder mehrere der folgenden Optionen festlegen:
|
Mit dem Suchsymbol am oberen Rand der Snapshot-Ansicht können Sie in der Ansicht der Aufrufhierarchie bzw. der Hotspot-Ansicht Knoten nach Namen suchen.
Alternativ dazu können Sie in der Ansicht der Aufrufhierarchie bzw. in der Hotspot-Ansicht mit der rechten Maustaste auf einen beliebigen Knoten klicken und aus dem angezeigten Kontextmenü die Option „Find in Call Tree“ bzw. „Find in Hotspots“ auswählen.
Der Profiler bietet mehrere Möglichkeiten zum Speichern eines Snapshots. Die folgende Tabelle enthält eine Beschreibung dieser Optionen:
Symbol |
Name |
Zweck |
---|---|---|
|
Symbol „Save the Snapshot in the Project“ (am oberen Rand der Snapshot-Ansicht) |
Speichert den Snapshot im Verzeichnis nbproject/private/idm-profiler Ihres Projekts. Die im Projekt gespeicherten Snapshots werden im Bereich „Saved Snapshots“ der Profiler-Ansicht angezeigt. |
|
Symbol „Save the Snapshot Externally“ (am oberen Rand der Snapshot-Ansicht) |
Speichert den Snapshot in einem beliebigen externen Verzeichnis. |
|
Schaltfläche „Save As“ (im Bereich „Saved Snapshots“) |
Speichert den Snapshot in einem beliebigen externen Verzeichnis. |
Identity Manager enthält ein Lernprogramm (profiler-tutorial.zip), mit dem Sie lernen können, wie Sie den Profiler zur Problembehebung bei Formularen, Java-Objekten, Regeln, Arbeitsabläufen und XPRESS-Objekten nutzen.
Führen Sie die folgenden Schritte aus, um das Lernprogramm durchzuarbeiten.
Wählen Sie „File > New Project“.
Geben Sie Folgendes an, wenn der Assistent zum Erstellen neuer Projekte angezeigt wird, und klicken Sie dann auf „Weiter“:
Wählen Sie in der Liste „Categories“ den Eintrag „Web“ aus, um festzulegen, welchen Projekttyp Sie erstellen wollen.
Wählen Sie aus der Projektliste den Eintrag „Identity Manager Project“.
Wenn Sie eine Entwicklungsumgebung mit vollem Leistungsumfang erhalten möchten, müssen Sie ein reguläres Identity Manager-Projekt erstellen. Wählen Sie nicht die Option „Identity Manager Project (Remote)“ aus.
Füllen Sie im Fenster „Name and Location“ die folgenden Felder aus und klicken Sie dann auf „Weiter“.
Project Name: Geben Sie als Projektnamen Idm80 ein.
Project Location: Übernehmen Sie den standardmäßigen Speicherort oder geben Sie einen anderen Speicherort an.
Project Folder: Übernehmen Sie den Standardordner oder geben Sie einen anderen Ordner an.
Geben Sie den Ort der war-Datei von Identity Manager 8.1 ein, wenn das Dialogfeld „Identity Manager WAR File Location“ angezeigt wird. Beim Entpacken dieser Datei wird in der Regel eine idm.war-Datei im gleichen Verzeichnis erzeugt.
Klicken Sie auf „Weiter“. Das Fenster „Repository Setup“ wird angezeigt.
Sie brauchen die Standardeinstellungen in diesem Fenster nicht zu ändern. Klicken Sie auf „Fertigstellen“. Wenn im Ausgabefenster der Identity Manager-IDE die Meldung BUILD SUCCESSFUL angezeigt wird, können Sie die Dateien des Profiler-Lernprogramms extrahieren. Anweisungen dazu finden Sie unter Schritt 2: Entpacken des Profiler-Lernprogramms.
Entpacken Sie die Datei profiler-tutorial.zip in das Projekt-Stammverzeichnis. Es werden folgende Dateien extrahiert:
<project root>/custom/WEB-INF/config/ProfilerTutorial1.xml <project root>/custom/WEB-INF/config/ProfilerTutorial2.xml <project root>/src/org/example/ProfilerTutorialExample.java <project root>/PROFILER_TUTORIAL_README.txt
Jetzt können Sie den Profiler starten. Gegen Sie zu Schritt 3: Starten des Profilers.
Erhöhen Sie mithilfe der Anleitung unter Vorbereitung die Speicherressourcen für den Server und die Netbeans-JVM.
Starten Sie den Profiler mit einer der beiden unter Übersicht beschriebenen Möglichkeiten.
Wenn das Dialogfeld „Profiler Options“ angezeigt wird, können Sie Optionen für das Profiling eingeben.
Gehen Sie zu Schritt 4: Festlegen der Optionen für das Profiling
Weitere Informationen zu den verschiedenen Profiler-Optionen finden Sie unter Festlegen von Optionen für das Profiling.
Für dieses Lernprogramm sollten Sie die folgenden Profiler-Optionen eingeben:
Wählen Sie in der Registerkarte „Mode“ die Option „Java and IDM Objects“, um das Profiling für Formulare, Regeln, Arbeitsabläufe, Java- und XPRESS-Objekte durchzuführen.
Klicken Sie auf die Registerkarte „Java Filters“.
Gehen Sie wie folgt vor, um alle Java-Klassen von Identity Manager außer Ihre benutzerspezifischen Java-Klassen (in diesem Fall org.example.ProfilerTutorialExample) zu deaktivieren:
Klicken Sie auf „New“. Ein neues leeres Feld erscheint am Ende der Filterspalte.
Geben Sie in das neue Feld com.waveset.* ein und markieren Sie dann das Kontrollkästchen „Exclude“.
Klicken Sie erneut auf „New“.
Geben Sie in das neue Feld com.sun.idm.* ein und markieren Sie dann das Kontrollkästchen „Exclude“.
Klicken Sie auf „OK“, um den Profiler auszuführen.
Der Profiler benötigt einige Minuten zur Abarbeitung, wenn er zum ersten Mal nach einer Clean Project-Aktion an einem Projekt ausgeführt wird.
Nach Abschluss des Profiling werden Sie aufgefordert, sich anzumelden.
Geben Sie das Passwort configurator ein, aktivieren Sie das Kontrollkästchen „Remember Password“ und klicken Sie anschließend auf „OK“, um fortzufahren.
Melden Sie sich an, wenn das Identity Manager-Fenster angezeigt wird.
Normalerweise sollten Sie sich bei Identity Manager als ein anderer Benutzer statt nochmals als configurator anmelden. Sie sind im Profiler bereits als „configurator“ angemeldet, und der Sitzungspool von Identity Manager erlaubt nur einen Eintrag pro Benutzer. Mehrere Benutzereinträge können die Funktion des Sitzungspools beeinträchtigen und die feiner abgestimmte Suche nach Leistungsproblemen erschweren.
In diesem einfachen Beispiel hat dies jedoch keine Auswirkungen, sodass Sie sich als configurator/configurator anmelden können.
Wählen Sie in Identity Manager „Serveraufgaben > Aufgaben ausführen“, und klicken Sie dann auf „ProfilerTutorialWorkflow1“.
Es kann sein, dass es einige Augenblicke dauert, bis das Lernprogramm reagiert.
Obwohl Sie jetzt schon einen Snapshot erstellen können, sollten Sie zunächst die Profiling-Ergebnisse löschen, den Profiler starten, ihn nochmals ausführen und dann erst einen Snapshot erstellen.
Am Besten ist es, den Profiler vor dem Erstellen eines Snapshots einige Male auszuführen, damit Sie sicherstellen können, dass alle Cache-Speicher vorbereitet und alle JSPs compiliert sind usw.
Durch mehrmalige Ausführung des Profilers können Sie sich auf die eigentlichen Leistungsprobleme konzentrieren. Die einzige Ausnahme von dieser Regel besteht dann, wenn beim Füllen des Cache-Speichers selbst Probleme auftreten.
Gehen Sie zur IDM-Profileransicht in der Identity Manager-IDE zurück. Klicken Sie auf das Symbol „Reset Collected Results“ im Abschnitt „Profiling Results“ (oder „Controls“), um alle bisher erfassten Profiling-Ergebnisse zu löschen.
Wählen Sie in Identity Manager „Serveraufgaben > Aufgaben ausführen“, und klicken Sie dann auf „ProfilerTutorialWorkflow1“.
Wenn das Prozessdiagram angezeigt wird, sollten Sie zur Identity Manager-IDE zurückgehen und im Abschnitt „Profiling Results“ auf „Take Snapshot“ klicken.
Die Identity Manager-IDE lädt die Snapshots und zeigt die Ergebnisse in der rechten Fensterhälfte an.
Dieser Bereich wird als Ansicht der Aufrufhierarchie bezeichnet. In der obersten Ebene der Aufrufhierarchie sollte /idm/task/taskLaunch.jsp zusammen mit einer Zeitdauer in der Spalte „Time“ erscheinen. Die Zeit sollte zeigen, dass der gesamte Vorgang sechs oder mehr Sekunden dauerte.
Klappen Sie den Knoten /idm/task/taskLaunch.jsp auf, und jetzt sehen Sie, dass ProfilerTutorialWorkflow1 sechs Sekunden dauerte.
Klappen Sie den Knoten ProfilerTutorialWorkflow1 auf. Beachten Sie, dass activity2 vier Sekunden und activity1 zwei Sekunden dauerte.
Klappen Sie activity2 auf.
Beachten Sie, dass action1 zwei Sekunden und action2 zwei Sekunden dauerte.
Klappen Sie action1 auf. Sie sehen, dass der Aufruf (<invoke>) ebenfalls zwei Sekunden dauerte.
Doppelklicken Sie auf <invoke>, um ProfilerTutorialWorkflow1.xml zu öffnen, und markieren Sie die folgende Zeile:
<invoke name=’example’ class=’org.example.ProfilerTutorialExample’/> |
Sie sollten sehen, dass der Aufruf der Methode ProfilerTutorialExample zwei Sekunden dauerte.
Statt des Quellcodes im Projekt schauen Sie sich durch den Snapshot erfassten XML-Code an. Snapshots sind vollkommen unabhängig. (Ausführliche Informationen finden Sie unter Wie findet und verwaltet der Profiler Quellcode.)
Klicken Sie auf die Registerkarte „CPU:Datum><Uhrzeit“, um zum Snapshot zurückzukehren.
Klappen Sie den <invoke>-Knoten auf. Sie sehen, dass der Profiler zwei Sekunden in der Java-Methode ProfilerTutorialExample.example() verbracht hat.
Doppelklicken Sie auf den Methodennamen, um den Quellcode (ProfilerTutorialExample.java) zu öffnen, und markieren Sie die folgende Zeile:
Thread.sleep(2000); |
Hier liegt das Problem! Diese Methode enthält einen 2-Sekunden dauernden Sleep-Thread.
Wenn Sie zur Ansicht der Aufrufhierarchie zurückkehren, sehen Sie, dass alle 2-s-Pfade zu dieser Methode führen. Es sollten isg. drei Pfade mit einer Gesamtdauer von sechs Sekunden zu sehen sein.
Klicken Sie auf die Registerkarte „Hotspots“ am unteren Rand der Aufrufhierarchie, um die Hotspot-Ansicht zu öffnen. Sie sehen, dass die Methode ProfilerTutorialExample.example() insgesamt sechs Sekunden zur Ausführung benötigte.
(Weitere Informationen zu Hotspots finden Sie unter Arbeiten mit der Snapshot-Ansicht.)
Klicken Sie mit der rechten Maustaste auf ProfilerTutorialExample.example() und wählen Sie im Kontextmenü die Option „Show Back Traces“ aus.
Im unteren Bereich wird eine neue Registerkarte namens „Back Traces“ angezeigt.
Klappen Sie den Knoten ProfilerTutorialExample.example() in der Registerkarte „Back Traces“ auf. Sie sehen, dass diese Methode von drei verschiedenen Routinen aufgerufen wurde und jede Ausführung zwei Sekunden dauerte.
(Weitere Informationen zu Rückverfolgungen finden Sie unter Arbeiten mit der Snapshot-Ansicht.)
Klicken Sie auf das Symbol „Snapshot im Projekt speichern“, um den Snapshot zu speichern, und schließen Sie ihn.
Im Abschnitt „Saved Snapshots“ der Registerkarte „IDM Profiler“ sollte der gespeicherte Snapshot jetzt aufgeführt sein. Es kann sein, dass Sie bei längeren Listen einen Bildlauf nach unten durchführen müssen, um ihn zu sehen.
Markieren Sie den gespeicherten Snapshot und klicken Sie dann auf „Open“, um ihn wieder zu öffnen.
Mithilfe der Schaltfläche „Save As“ können Sie Snapshots extern speichern. Mithilfe der Schaltfläche „Load“ laden Sie einen Snapshot von außerhalb eines Projekts.
Schließen Sie den Snapshot wieder.
Der nächste Abschnitt dieses Lernprogramms befasst sich mit dem Profiling einer „ManualAction“ eines Arbeitsablaufs.
Wählen Sie in Identity Manager „Serveraufgaben > Aufgaben ausführen“, und klicken Sie dann auf „ProfilerTutorialWorkflow2“.
Nach einigen Sekunden wird ein leeres Formular angezeigt.
Klicken Sie auf „Speichern“. Das Prozessdiagramm wird angezeigt.
Klicken Sie erneut auf „Serveraufgaben > Aufgaben ausführen“.
Gehen Sie zur IDM-Profileransicht der Identity Manager-IDE zurück und klicken Sie im Abschnitt „Profiling Results“ auf „Reset Collected Results“.
Klicken Sie jetzt in Identity Manager auf „ProfilerTutorialWorkflow2“.
Klicken Sie auf „Speichern“, wenn das leere Formular erneut angezeigt wird.
Klicken Sie in der IDM-Profileransicht auf „Take Snapshot“.
Nach einigen Sekunden wird in der Aufrufhierarchie ein Snapshot angezeigt. Sie sehen, dass /idm/task/workItemEdit.jsp zur Ausführung ca. sechs Sekunden benötigte. Dieses Ergebnis entspricht dem der manuellen Aktion im Arbeitsablauf.
Klappen Sie den Knoten /idm/task/workItemEdit.jsp auf. Sie sehen, dass die Ausführung aller Ableitungen im Formular ManualAction sechs Sekunden dauerte.
Klappen Sie die Knoten Derivation, displayNameForm, variables.dummy und <block> auf.
Sie sehen, dass der <block>-Knoten zur Ausführung sechs Sekunden benötigte und der Profiler in jedem Aufruf der Methode ProfilerTutorialExample.example() zwei Sekunden verbracht hat.
Sie können auf <block>doppelklicken, um den Quellcode zu sehen.