Zuerst nur ein wenig Hintergrund:CPU-Auslastung Spikes in WebSphere 6.1
Einer unserer Kunden ist die CPU-Auslastung Spikes für WebSphere-Instanzen erlebt einen unserer Web-Anwendungen laufen (andere Instanzen mit anderen Anwendungen sind in Ordnung) . Sie haben eine Testumgebung und eine Live-Umgebung (beide iSeries), die beide das Problem erfahren - mit einer einzigen App pro Instanz-Setup. Wir haben diese Anwendung lokal in eigenen Testumgebungen und für viele andere Kunden auf iSeries ohne ähnliche Probleme implementiert.
Was tatsächlich passiert:
Jede Sekunde oder so, die CPU-Auslastung für die WebSphere-Prozess CPU-Auslastung springt von 7%
überall - 20%
obwohl es keine Anfragen zum Zeitpunkt verarbeitet werden. Der Kunde hat gemeldet, dass Spitzen so hoch wie 30%
sind. Diese Spitzen entsprechen im Durchschnitt 1.5%
der CPU insgesamt - die anderen WebSphere-Instanzen verwenden normalerweise 0%
- 0.1%
im Leerlauf.
Meine Untersuchungen bisher
So hatte ich einen Blick auf die Fäden. Ein Thread in der Testumgebung verwendete ~350
CPU-Zyklen pro Sekunde. Ein ähnlicher Thread in ihrer Live-Umgebung verwendete ~1500
CPU-Zyklen pro Sekunde (was zeigt, dass er eine größere CPU hat). Das Call-Stack für diese Fäden sieht aus wie
Type Program Statement Procedure
QLESPI QSYS 17 LE_Create_Thread2__FP12crtt >
QJVALIBJVM QSYS 7 startThread__FPv
J com/ibm/ws/util/Threa > run
J com/ibm/ws/util/Threa > run
J com/ibm/ws/util/Threa > getTask
J com/ibm/ws/util/Bound > poll
Die gesamten Klassennamen aus der unteren Zeile sind com/ibm/ws/util/BoundedBuffer
. Ich fragte den Kunden für mich eine JVM Dump zu tun - die einzige zusätzliche Informationen, die ich von diesem bekam, war der Faden Name:
Thread: 00002F82 Deferrable Alarm : 11
Nun zu meinen Fragen:
- Kann jemand von euch identifizieren das Problem, angesichts dieser Symptome? (Vielleicht ist das ein langer Schuss!)
- Was ist
Deferrable Alarm
? Von der JVM-Dump kann ich 4 Threads mit diesem Namen sehen. Die anderen drei scheinen gut zu sein. Indem ich mein lokales WebSphere (unter Windows) debugge und Haltepunkte in derBoundedBuffer
Klasse hinzufüge, sehe ich, dassBoudedBuffer
s abfragen und periodisch einen Listener aufrufen. - Ich habe keinen Zugriff auf die WebSphere-Konsole für die Kundencomputer, und sie besitzen keine Konfigurationsänderungen. Ich kann sie bitten, die Konsole für mich zu überprüfen - was soll ich sie fragen?
- Ich habe einen Telnet-Zugang zu den Kundenboxen, kann ich hier noch etwas untersuchen? Betrachten Sie die WebSphere-Profildateien usw.? Welche Dateien sollte ich betrachten?
- Da Call Stack und JVM Dump nicht explizit auf unseren Code verweisen, kann davon ausgegangen werden, dass dies ein Konfigurationsproblem ist?
Es war eine lange Frage, also vielen Dank für das Lesen so weit.
30. April Update (1)
An diesem Morgen habe ich bemerkt, dass dieses Verhalten geschieht erst nach der ersten Anfrage des Tages verarbeitet wurde (unabhängig davon, welche Web-Service aufgerufen wird). Dies zeigt den Finger zurück auf unsere Anwendung oder Apache Axis. Könnte es sein, dass dies nur normales Verhalten ist ?!
30. April Update (2)
So scheint es, dass diese CPU-Aktivität eine Art von Housekeeping-Aktivität für den Web-Container ist oder vielleicht etwas innerhalb Apache Axis. Ich habe jetzt beobachtet, dass dies auf einigen verschiedenen Web-Anwendungen auf einigen verschiedenen Servern passiert. Anwendungen ohne Webkomponente erleiden nicht den gleichen zusätzlichen CPU-Overhead.
Ich könnte mir vorstellen, wenn es um die Hausarbeit geht, könnte das "Tuning" irgendwie kontraproduktiv sein - damit meine ich, dass der App Server im Idle besser macht, würde die Menge an "echter" Arbeit negativ beeinflussen machen.
Ist diese Client-iSeries auf dem gleichen Niveau wie Ihre anderen Clients? Gibt es andere Unterschiede, die diesen einzigartig machen? – Ichorus
Ja, es ist das gleiche Niveau. Es passiert auch auf WebSphere 5.1 sowie 6.1 –