Leistungsengpässe anzeigen

Mit Hilfe der statistischen Sichten können Sie Leistungsengpässe identifizieren.  In diesem Abschnitt wird ein Szenario beschrieben, in dem die Ausführungszeit verbessert werden soll. Die Sicht 'Paketstatistiken' ist dazu ein guter Anfangspunkt, denn dort lassen sich die für eine langsame Ausführungszeit verantwortlichen Pakete ausmachen. Von hier aus lassen sich die Klassen oder Methoden finden, die für das schlechte Leistungsverhalten verantwortlich sind.

Beim Starten der Anwendung, für die ein Profil erstellt werden soll, aktiveren Sie die Erfassung von Informationen zum Ausführungsablauf.  (Wählen Sie die Profiloption Die Anwendung ist zu langsam aus, und wählen Sie anschließend in den Detailoptionen die Option Grafische Details zum Ausführungsablauf anzeigen aus.)   

Die geöffnete Sicht 'Paketstatistiken' sieht folgendermaßen aus:

 

In dieser Sicht werden Statistiken zu den verschiedenen Klassen angezeigt und nach den Paketen der Klassen gruppiert.  Diese Sicht kann so angepasst werden, dass beliebige statistische Daten angezeigt werden. Dazu zählen zum Beispiel die Speicherzuordnung oder zeitbasierte Statistiken.  Die zeitbasierten Spalten müssen für dieses Beispiel sichtbar sein, da Sie erforderliche Informationen enthalten. (Klicken Sie mit der rechten Maustaste, wählen Sie die Option Spalten auswählen aus, und machen Sie diese Spalten sichtbar.)   Anschließend sortieren Sie die Pakete nach der Spalte 'Basiszeit' der Ausführung.  Wie oben zu sehen war, ist das Paket com.ibm.ws.ejbpersistence.dataaccess der "Ausführungsbrennpunkt", und die Klasse DataAccessRequestImpl in diesem Paket ist für die schlechte Ausführungszeit verantwortlich.

Anhand dieser Informationen können Sie nun in der Sicht 'Klassenstatistiken' die Methode ausfindig machen, die für das schlechte Leistungsverhalten der Klasse verantwortlich ist.  


Es stellt sich also heraus, dass die Methode execute für das schlechte Leistungsverhalten der Klasse DataAccessRequestImpl verantwortlich ist; die Ausführungszeit ist im Vergleich zu der Zeit sehr hoch, die in der Methode executeOneRowFBPK verbracht wurde.

Schauen Sie sich die Sicht 'Klassenstatistiken' genauer an. Eine Auffälligkeit lässt sich an dieser Stelle noch beobachten: die Klasse java.text.NumberFormat ist die erscheint als nächster Eintrag in der Liste der Klassen, die für die langsame Ausführung verantwortlich sind. Genauer betrachtet beansprucht java.text.NumberFormat.getCurrencyInstance() die meiste der in dieser Klasse verbrachten Zeit. Das gibt Ihnen einen Eindruck davon, was es kosten kann, einige scheinbar einfache Methoden einzusetzen. Selbst wenn es sich bei NumberFormat.getCurrencyInstance() um eine einfache API zu handeln scheint, kann es einen massiven Einfluss auf die Gesamtleistung Ihrer Anwendung haben, diese Methode häufig aufzurufen.

Sehen Sie sich nun die Methodenaufrufe der Methode DataAccessRequestImpl.execute() an. Ein leistungsfähiges Feature des Profilerstellungstools ist die grafische Darstellung der Anwendungsausführung, in der Sie die Methodenausführung auf Methodenaufrufebene beobachten können. Diese Sicht ist hilfreich, weil Sie darin das Ausführungsmuster und die Unterschiede zwischen verschiedenen Aufrufen derselben Methode ersehen können.   In der folgenden Sicht 'Methodenaufruf' wird der Aufruf der Methode DataAccessRequestImpl.execute() dargestellt.


 

In dieser Grafik können Sie die Quelle des Aufrufs im Ausführungsstack sehen und in den Quellcode der Methode springen.  Sie können außerdem die verbrauchte Zeit sehen, indem Sie den Cursor auf einen Balken bewegen.

In der unten abgebildeten Tabelle 'Methodenaufruf' werden die gleichen Methodenaufrufe im Tabellenformat dargestellt. Sie werden bemerken, dass die Ausführungszeit (in der Spalte 'Kumulierte Zeit') beim ersten Aufruf der Methode im Vergleich zu den späteren Methodenaufrufen sehr hoch ist.


 

Durch Analysieren des Ausführungsstacks der Methodenaufrufe finden Sie den Grund dafür, warum dieser Aufruf so viel langsamer war als die restlichen Methodenausführungen. Wenn Sie das Muster der Methodenaufrufe betrachten, sehen Sie, dass der erste Aufruf der Methode OnlineItembean.FindByValue(IndexedObject) sehr viel mehr Zeit als die restlichen Methodenaufrufe beansprucht hat.

Letztlich haben Sie also herausgefunden, dass für die lange Ausführungszeit der erste Aufruf der Methode OnlineItembean.FindByValue verantwortlich ist.

 

Verwandte Konzepte
Übersicht zum Profilerstellungstool

Verwandte Tasks
Erstellen eines Anwendungsprofils
Einen Java-Prozess starten oder anhängen

 
 

>