2009-04-29 6 views
5

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 der BoundedBuffer Klasse hinzufüge, sehe ich, dass BoudedBuffer 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.

+0

Ist diese Client-iSeries auf dem gleichen Niveau wie Ihre anderen Clients? Gibt es andere Unterschiede, die diesen einzigartig machen? – Ichorus

+0

Ja, es ist das gleiche Niveau. Es passiert auch auf WebSphere 5.1 sowie 6.1 –

Antwort

0

Sehr instinktiv (da ich mit iSeries-Plattformen nicht vertraut bin) würde ich mich mit Disk-IO-Problemen befassen. Können Sie das Disk-Subsystem beschreiben? Können Sie sehen, ob Ihre App ungewöhnlich viel Zeit in Iowait verbringt?

+0

Danke für den Vorschlag. Ich habe mir I/O angeschaut, aber wenn der Server im Leerlauf ist, gibt es immer noch CPU-Spitzen, aber keine I/O-Aufrufe. –

0

Meine beste Vermutung ist, dass es eine Art von Überwachung auf der Instanz ist, wie Tivioli usw. Haben Sie ausgeschlossen, GC-Aktivität?

HTH Tom

+0

Danke für den Kommentar Tom. Tivioli war eines der Dinge, die wir zuerst angeschaut haben. Aber nicht der Schuldige. Ich habe es geschafft, den Kunden mit der "Housekeeping" -Theorie zufrieden zu stellen, also ist das jetzt hoffentlich das Ende: P –

1

Sie könnten versuchen, Heapspeicherauszüge der Anwendung zu profilieren und zu tun, die ein paar Fragen in Bezug auf Speicher und CPU-Auslastung beantworten konnte.

0

Die meisten Anwendungsserver sind in Java selbst implementiert, genau wie WebSphere. Diese Server müssen nicht nur Kundenanfragen beantworten, sondern auch andere periodische Aufgaben ausführen, wie zum Beispiel die Ressourcenpoolverwaltung. Wenn Sie diese Jobs ausführen, werden einige temporäre Objekte erstellt, für die eine Datenbereinigung erforderlich ist.

Je nachdem, wie viel Heapspeicher Sie zugewiesen haben, Einstellungen für die Verwendung und den Garbage Collector, wird Garbage Collector aufgerufen. Ich würde sagen, versuchen Sie zu sehen, ob es Garbage Collector Thread ist, der Ihre CPU beansprucht. Verbinden Sie dazu das jconsole-Dienstprogramm für einen Tag mit dem Remote-Websphere-Prozess und prüfen Sie, ob eine Beziehung zwischen der Heap-Nutzung und der CPU-Nutzung besteht.

1

Ich würde empfehlen, die von IBM zur Verfügung gestellten documentation zu sammeln und eine PMR zusammen mit Ihrer eigenen Untersuchung zu erhöhen. Dinge, die Sie vielleicht vermuten:

  • Garbage Collection (unwahrscheinlich auf niedrige Anwendungsnutzung)
  • Timer oder Aufgaben (wie java.util.Timer oder commonj Arbeit Manager)
  • Pretest-Verbindung, die eine komplexe SQL-Abfrage hat (in der Quelleigenschaften Server-Daten WebSphere Application Datasource)

ich auch den Profiler empfehlen würde mit der Ursache zu ermitteln, ist YourKit profiler ein ziemlich Anständiger.

0

Ich habe auch das gleiche Problem, [Deferrable Alarm: x] mit BoundedBuffer verwenden. Der einzige Unterschied, den ich habe, ist, dass dies auf einer Windows 7 64bit Maschine ist. Es wird absolut kein Tivioli oder ein anderer Batch-Prozess ausgeführt, keine Anforderungen werden gestellt, die einzelne Instanz ist nur im Leerlauf.

Ich kann die Anwendung im DEBUG-Modus ausführen und den Deferrable Alarm Thread pausieren und die CPU-Spitzen stoppen, fortsetzen und sie beginnen erneut.

Ich habe Festplattenaktivität, Netzwerkaktivität überprüft und es ist nichts passiert dort.

Ich verwende WebSphere 6.1.0.27.

Verwandte Themen