Erste Schritte: Erkennung von Thread-Engpässen

Thread-Engpässe wie Konkurrenzsituationen und gegenseitige Sperren können Ihre Anwendung verlangsamen oder stoppen. Die Perspektive 'Profilermittlung und Protokollierung' enthält Ansichten und Tools, die Ihnen helfen, diese Probleme zu erkennen und zu lösen.

Für die Erkennung von Thread-Engpässen sind folgende Ansichten verfügbar:

Sie können auch eigene, mit dem Probekit entworfene Sonden nutzen, um Thread-Engpässe festzustellen.

Übergeordnetes Thema: Erste Schritte bei der Bestimmung von Laufzeitproblemen

Daten für die Erkennung von Thread-Engpässen sammeln

Voraussetzungen:

Gehen Sie zum Sammeln von Daten wie folgt vor:
  1. Wählen Sie im Dialogfenster 'Profil ermitteln' auf der Registerseite 'Profilerstellung' die Profilgruppe Thread-Analyse aus.
  2. Klicken Sie auf Profil ermitteln, um Ihre Anwendung zu starten.
  3. Testen Sie die Abschnitte Ihrer Anwendung, in denen Sie Thread-Engpässe vermuten. In der Profilerstellungsressource 'Thread-Analyse', die im Profilerstellungsnavigator angezeigt wird, werden Thread-Daten gesammelt und erfasst. Anschließend können Sie Ihre Anwendung beenden.

Thread-Ansicht und Ansicht 'UML2-Folgediagramm' für die Erkennung von Thread-Engpässen verwenden

Die Thread-Ansicht zeigt ein Protokoll der Thread-Ausführung für alle Threads Ihrer Anwendung an und weist gegenseitige Sperren und Konkurrenzsituationen explizit aus. In der Ansicht 'UML2-Objektinteraktionen' wird die Folge der Aufrufe während der Profilerstellung angezeigt.

Gehen Sie wie folgt vor, um Thread-Engpässe zu erkennen:
  1. Rufen Sie die Thread-Ansicht auf. Klicken Sie dazu mit der rechten Maustaste auf die Profilerstellungsressource für die von Ihnen gesammelten Daten. Wählen Sie dann im Popup-Menü Öffnen mit > Thread-Ansicht aus.
  2. Suchen Sie in der Thread-Ansicht nach vertikalen Pfeilen Pfeile für Sperranforderungen zwischen den Threads. Ein Pfeil zeigt von einem Thread, der eine Sperre anfordert, auf den Thread, der die Sperre hält. Ein einzelner Pfeil zeigt eine Thread-Konkurrenzsituation an, bei der ein Thread darauf wartet, dass ein anderer Thread eine Sperre freigibt. Mehrere Pfeile weisen auf eine gegenseitige Sperre hin, wenn die Sperranforderungen ein kreisförmiges Muster bilden. In diesem Fall hindern sich Threads gegenseitig an der Ausführung, weil sie darauf warten, dass der jeweils andere Thread eine Sperre freigibt.
  3. Stellen Sie fest, welche Methoden beim Auftreten des Engpasses aufgerufen wurden. Führen Sie die folgenden Schritte aus, um die Methoden zu ermitteln:
    1. Suchen Sie nach dem Namen der Sperre, auf die der Thread wartet. Bewegen Sie den Cursor in der Thread-Ansicht auf den Thread, der auf die Sperre wartet. In der Kurzinfo wird der Name der Sperre und der Name des Threads, der die Sperre hält, angezeigt.
    2. Klicken Sie mit der rechten Maustaste auf die Profilerstellungsressource 'Thread-Analyse'. Wählen Sie dann im Popup-Menü Öffnen mit > UML2-Objektinteraktionen aus.
    3. Wählen Sie in der Thread-Ansicht in der Liste der Threads den Thread aus, der die Sperre hält und den Sie untersuchen möchten. In der Ansicht 'UML2-Objektinteraktionen' werden die Objektinteraktionen des ausgewählten Threads, die Sperre und die Anforderungen nach der Sperre angezeigt.
    4. Positionieren Sie die Markierung 'Aktuelle Zeit' auf dem Pfeil für die Anforderung, die Sie untersuchen möchten. Mit diesem Schritt werden die Ansicht 'UML2-Objektinteraktionen' und die Profilerstellungsressource 'Aufruf-Stack' im Monitor für Profilerstellung synchronisiert. Die Markierung 'Aktuelle Zeit' befindet sich standardmäßig am linken Rand des Diagramms in der Thread-Ansicht. Sie können die Markierung mit der Maus verschieben.
  4. Öffnen Sie den Quellcode, der für das Halten der Sperre verantwortlich ist, sofern der Code verfügbar ist. Klicken Sie dazu im Aufruf-Stack für den Thread, der die Sperre hält, mit der rechten Maustaste auf den zuletzt ausgeführten Aufruf. Wählen Sie dann im Popup-Menü Quelle öffnen aus. Quellcode ist nur verfügbar, wenn Sie ein Profil für ein Java-Projekt erstellen, das derzeit in der Java-Perspektive geöffnet ist. Jetzt können Sie Ihren Code ändern, um den Engpass zu beseitigen.
  5. Erstellen Sie erneut ein Profil Ihrer Anwendung, um zu überprüfen, ob Sie den Engpass beseitigt haben.

Weitere Informationen hierzu finden Sie im Abschnitt Thread-Engpässe erkennen.

Ansichten 'Ausführungsablauf' und 'Tabelle für Ausführungsablauf' verwenden

Diese Ansichten zeigen die Rohdaten, auf denen die Thread-Ansicht basiert, in verschiedenen Formaten an.

Verwenden Sie diese Ansichten wie folgt:
  1. Rufen Sie die Ansicht 'Ausführungsablauf' oder 'Tabelle für Ausführungsablauf' auf. Wählen Sie dazu Fenster > Sicht anzeigen > Andere... aus. Erweitern Sie dann im Dialogfenster 'Sicht anzeigen' die Anzeige für den Eintrag Profilermittlung und Protokollierung und wählen Sie die gewünschte Ansicht aus.
  2. In den Ansichten 'Ausführungsablauf' und 'Tabelle für Ausführungsablauf' können Sie die Zeit für die Profilerstellung abziehen. Wählen Sie dazu im Popup-Menü Kompensierte Zeit aus.

Nutzungsbedingungen | Feedback
(C) Copyright IBM Corporation 2000, 2004. Alle Rechte vorbehalten.