Blockierte Threads in Java EE-Anwendungen
WebSphere Application Server überwacht die Aktivität der Threads und führt Diagnoseaktionen aus, falls einer von ihnen inaktiv wird.
- Eine Warnung wird in der Protokolldatei von WebSphere Application Server protokolliert.
Diese Warnung enthält den Namen des blockierten Thread und gibt an, wie lange er bereits aktiv ist. Folgende Nachricht wird in das Protokoll geschrieben:
Thread-Name steht dabei für den Namen, der im JVM-Thread-Speicherauszug angezeigt wird, Zeitangabe zeigt an, seit wann der Thread aktiv ist und Gesamtzahl_der_Threads gibt die Gesamtheit der System-Threads an.WSVR0605W: Der Thread Thread-Name ist seit Zeitangabe aktiv und möglicherweise blockiert. Es sind Summe der Threads Threads im Server vorhanden, die möglicherweise blockiert sind.
- Eine JMX-Benachrichtigung (Java™ Management Extensions) wird abgesetzt. Durch diese Benachrichtigung können Tools von anderen Anbietern
das Ereignis abfangen und entsprechende Maßnahmen ergreifen, z. B. die Erstellung eines JVM-Thread-Speicherauszugs für den
Server auslösen oder das Absetzen einer elektronischen Seite oder E-Mail. In der Klasse com.ibm.websphere.management.NotificationConstants
sind die folgenden JMX-Benachrichtigungsereignisse definiert:
- TYPE_THREAD_MONITOR_THREAD_HUNG - Dieses Ereignis wird ausgelöst, wenn ein (potenziell) blockierter Thread bemerkt wird.
- TYPE_THREAD_MONITOR_THREAD_CLEAR - Dieses Ereignis wird ausgelöst, wenn ein zuvor als blockiert gemeldeter Thread seine Arbeit abgeschlossen hat. Nähere Informationen hierzu finden Sie im Abschnitt über Fehlalarme.
- Es werden Änderungen an den Datenzählern der Performance Monitoring Infrastructure (PMI) ausgelöst. Diese PMI-Datenzähler werden von verschiedenen Tools wie Tivoli Performance Viewer für die Leistungsanalyse verwendet.
- Es werden Änderungen an den Datenzählern der Performance Monitoring Infrastructure (PMI) ausgelöst. Diese PMI-Datenzähler werden von verschiedenen Tools wie Tivoli Performance Viewer für die Leistungsanalyse verwendet.
Fehlalarme
WSVR0606W: Es wurde zuvor berichtet, dass der Thread Thread-Name blockiert
sei, aber er wurde ausgeführt. Der Thread war ungefähr
Zeit der Blockierung aktiv. Es sind Gesamtzahl_der_Threads insgesamt im Server vorhanden, die
möglicherweise immer noch blockiert sind.
Hier steht Thread-Name für
den Namen, der in einem JVM-Thread-Speicherauszug angezeigt wird, Zeit der Blockierung für die
ungefähre Zeit, die der Thread aktiv ist, und Summe der Threads für die
Bewertung der System-Threads.Automatische Anpassung des Schwellenwerts für die Blockierungszeit
WSVR0607W: Es wurden fälschlicherweise zu viele Thread-Blockierungen berichtet. Der Schwellenwert
für Blockierung wird jetzt auf Zeitangabe gesetzt.
Hier steht
Zeitangabe für Schwellenwert für die Zeit in Sekunden, die ein Thread
aktiv sein kann, bevor er als blockiert angesehen wird.Sie können verhindern, dass WebSphere Application Server den Schwellenwert für die Blockierungszeit automatisch anpasst. Nähere Informationen hierzu finden Sie im Artikel Richtlinie für die Erkennung von Blockierungen konfigurieren.
Systemalarme
Ein Anwendungsserver überwacht die Aktivität von Threads, in denen Systemalarme ausgeführt werden. Wenn ein Systemalarmthread länger aktiv ist als mit dem Schwellenwert des Alarmthreadmonitors definiert ist, protokolliert der Anwendungsserver die folgende Warnung im Systemprotokoll. Diese Nachricht zeigt den Namen des Threads an, der nicht antwortet, den Zeitraum, über den der Thread bereits aktiv war, und den Ausnahmebedingungsstack des Threads, in dem die Systemkomponente angegeben ist.
UTLS0008W: Der Alarmthread Threadname ist seit n
Millisekunden aktiv und möglicherweise blockiert. Gesamtzahl_der_ThreadsThread-Stack
In dieser Nachricht steht Threadname für den Namen, der im JVM-Threadspeicherauszug angezeigt wird, n zeigt an, wie lange der Thread ungefähr aktiv war, Gesamtzahl_der_Threads gibt die Gesamtheit der Systemthreads an und Thread-Stack ist der Ausnahmebedingungsstack des Threads.
Nach Beendigung der Alarmverarbeitung wird die folgende Nachricht in das Systemprotokoll geschrieben. Diese Nachricht gibt den Thread an, der den Fehlalarm ausgelöst hat.
UTLS0009W: Es wurde zuvor berichtet, dass der Alarmthread Threadname blockiert sei,
aber er wurde ausgeführt. Der Thread war ungefähr n Millisekunden aktiv.
In dieser Nachricht steht Threadname für den Namen, der im JVM-Threadspeicherauszug angezeigt wird, und n zeigt an, wie lange der Thread ungefähr aktiv war.
Normalerweise verarbeiten Systemalarme keine Lastspitzen, weil diese Aktivität die Verarbeitung nachfolgender Systemalarme verlangsamen könnte, was sich wiederum auf das Serververhalten auswirken könnte. Die Nachricht UTLS0008W soll den Mitarbeitern des IBM Support bei der Untersuchung von Problemen helfen, die möglicherweise durch das Systemalarmverhalten verursacht werden.
Alle Systemalarme verwenden einen allgemeinen Alarm-Thread-Pool gemeinsam. Die Eigenschaften, die die Überwachung dieses Thread-Pools regeln, können mithilfe der Administrationskonsole optimiert werden. Sie können die Frequenz, mit der WebSphere Nachrichten wegen blockierter Alarmthreads generiert, durch eine Änderung des Prüfintervalls bzw. Schwellenwerts für Alarmthreads verringern. Die Änderung dieser Einstellungen wird im Abschnitt Richtlinie für die Erkennung von Blockierungen konfigurieren beschrieben.