2016-05-12 12 views
0

Wir haben eine Wildfly-Instanz mit einer einfachen Java-Rest-Anwendung auf einem 36-Core-Server ausgeführt. Die Anwendung hat keine Standardjobs, die im Hintergrund ausgeführt werden, sie antwortet einfach auf Benutzeranforderungen (< 500 pro Tag).Analysieren Sie den Remote-Debugging-Stack einer Java-Anwendung auf Wildfly

Unser Administrator bemerkte heute Nacht ein seltsames Verhalten. Die Wildfly-Instanz nutzte anscheinend die volle Kapazität des Servers seit 2:00 Uhr morgens. Zu dieser Zeit konnte kein Benutzer die Anwendung benutzt haben. Es sind keine Protokolldateien zwischen der letzten Benutzeraktion am Vorabend und der ersten Benutzeraktion heute Morgen verfügbar.

Ich habe den Remote-Debugger in Eclipse gestartet und würde gerne verstehen, was alle von Wildfly gestarteten Threads tatsächlich tun?

  1. 68 Einträge. Wozu dienen diese Threads? Können sie die Performance/Kapazitätsabdeckung beeinflusst haben? Kann ich die Anzahl dieser Threads beschränken? Sollte ich es machen?
  2. Deamon Thread [weld-worker-xx](Running) 25 Einträge.
  3. Thread[default task-x](Running) 8 Einträge. Dies sind wahrscheinlich die eigentlichen Benutzeraufgaben?
  4. Thread[XNIO-1 I/O-x](Running) 2 Einträge. Eingabe/Ausgabe in die Datenbank? Oder irgendeine Datei, wie e.q.
  5. Daemon Thread [Transaction Reaper](Running)
  6. Deamon Thread [Transaction Reaper Worker 0](Running)
  7. Thread [Periodic Recovery](Running)
  8. Viele <not responding>. Was bedeutet das eigentlich? Die Threads laufen, aber ich darf nicht reinschauen?
+0

Dies ist eine ziemlich breite Frage, aber ich vermute, dass Ihre Probleme mit den Threads sind, die nicht reagieren. Ich könnte mir vorstellen, dass sie die sind, die sich drehen und die CPU essen. – Kayaman

+0

Sie könnten auch 'kill -3 ausgeben lassen, damit Wildfly einen Thread-Dump nach stdout druckt (der in eine Datei umgeleitet werden sollte). Speichern Sie den Speicherauszug für eine spätere Analyse. – Kayaman

+0

Hallo Kayaman, danke für den Hinweis. Die '' Threads verschwanden nach einem Neustart und die Performance wurde einigermaßen besser. Wir werden versuchen, beim nächsten Auftreten des Problems einen Thread-Dump zu drucken. Ich bin immer noch an Erläuterungen zu allen anderen Thread-Stack-Einträgen interessiert, nur um zu verstehen, was normalerweise passiert. Also wäre jede Erklärung großartig! –

Antwort

0

Im Allgemeinen können Sie einen Blick auf das Gewinde-Subsystem in Wildfly haben:

https://docs.jboss.org/author/display/WFLY8/Threads+subsystem+configuration

Diese Performance-Tuning Guide ist auch sehr nützlich Threads und Thread-Pools zu verstehen:

http://www.mastertheboss.com/jboss-server/jboss-performance/wildfly-performance-tuning

Die von Ihnen genannten Threadtypen sind AFAICT:

MSC-Threads sind die modularen Service-Container-Threads. Sie können sich hier über die Konfiguration beschränkt: https://issues.jboss.org/browse/MSC-144 (-Dorg.jboss.server.bootstrap.maxThreads)

Standardgewinde: die I/O-Threads in den durch die Fäden Subsysteme für verschiedene Aufgaben definiert Pools.

XNIO-Threads: Undertow basiert auf der XNIO-API zum Erstellen von Worker-Threads mit dem bounded-queue-thread-pool. https://developer.jboss.org/thread/241230?start=0&tstart=0 - einige gute Performance Tuning-Tipps hier: http://www.mastertheboss.com/jboss-server/jboss-performance/wildfly-performance-tuning

Schweißarbeitsthreads sind die Gewinde der CDI-Implementierung verwendet und können als solche konfiguriert werden: http://docs.jboss.org/weld/reference/latest/en-US/html/configure.html#_thread_pool_configuration. Es scheint, dass weld einen Thread-Pool für jede Bereitstellung (https://issues.jboss.org/browse/WFLY-4653) beibehält und ab WF9 im Standalone-Modus konfigurierbar ist.xml

Transaktion Reaper und Arbeiter sind verantwortlich für die Überwachung der JTA-Transaktionen und Timeouts usw. http://www.mastertheboss.com/jboss-server/jboss-configuration/configuring-transactions-jta-using-jboss-as7-wildflyhttp://www.hhutzler.de/blog/a-deeper-dive-into-transaction-timeouts-with-jee7wildfly-and-oracle-rac/

Reriodic Erholung Gewinde: Nach einem Systemabsturz Periodic Recovery-Thread sollte verwenden XA wiederherzustellen und XA verpflichten, dies zu begehen Transaktion ohne Benutzereingriff. http://www.hhutzler.de/blog/a-deep-dive-into-2-phase-commit-with-wildfly-and-oracle-rac/