2010-04-25 3 views
21

Standardmäßig löscht WebLogic festsitzende Fäden nach 15 min (600 s), dies wird durch den Parameter StuckThreadMaxTime gesteuert. Mehr Details darüber, wie "Steckenbleiben" genau definiert ist, kann ich jedoch nicht finden. Speziell:WebLogic blockiert Fadenschutz

  • Wo ist der Punkt, an dem 15 Minuten Countdown beginnt. Anfrage Verarbeitung starten? Letzte wait() ähnliche Methode? Etwas anderes?
  • Gilt dies nur für Request-Processing-Threads oder für alle Threads? I.e. Kann ein Request-Processing-Thread diesen Schutz umgehen, indem er einen Worker-Thread für eine lange Aufgabe erzeugt? Insbesondere, kann es Antwortschreiben an solch einen Arbeiter delegieren ohne 15 Minuten Countdown?

Mein Anwendungsfall ist der Download von riesigen Dateien durch ein Berechtigungssystem. Da ein Benutzer authentifiziert werden muss und Berechtigungen zum Anzeigen einer Datei haben muss, kann ich dies (oder zumindest nicht wie) einem einfachen HTTP-Server überlassen, z. Apache. Und da Dateien riesig sein können, könnte der Download (zumindest in der Theorie) mehr als 15 Minuten dauern.

Antwort

21

Weblogic tut NICHT töten kleben Fäden nach der StuckThreadMaxTime. Die Nachricht ist nur eine Statusinformation, so dass Sie (d. H. Admin) wissen, dass der Thread 10 Minuten überschritten hat (600 Sek. = 10 Min., Nicht 15)

Dies ist ein konfigurierbarer Wert.

Der Zeitgeber wird gestartet, wenn der Thread mit der Verarbeitung der Anforderung im Server beginnt. Der Thread wird nicht gelöscht, sondern wird weiter verarbeitet, bis die Operation beendet ist. In Ihrem Fall müssen Sie sich also keine Sorgen machen, dass der Thread getötet wird. Sie haben sich gerade über die Zeit informiert - die Ihnen in diesem Anwendungsfall bekannt ist.

Es gilt für alle Threads AFAIK - jeder erzeugte Thread funktioniert auch unter den gleichen Regeln.

IMHO, Weblogic (oder jeder App-Server) ist nicht der Ort, um große Dateien zu speichern und zu bedienen. Dies ist im Idealfall für die Web-Server-Ebene gedacht - wir verwenden SunOne, auf dem das Datei-Download-Servlet ausgeführt werden kann. In Ihrem Fall benötigen Sie Tomcat zusammen mit Ihrem Apache, um dies zu optimieren.

+0

OK, aber wie ich weiß, kann es die gesamte Anwendung neu bereitstellen, wenn es zu viele festgefahrene Threads gibt, nicht? Ich könnte Dinge mit Session-Timeout verwechselt haben - wir hatten in der Vergangenheit einige Probleme damit. Über Dateien - Die Anwendung ist so umfangreich und fehlerhaft, dass es keine Zeit für die Optimierung gibt, da es immer dringlichere Probleme gibt. – doublep

+6

Der Server reagiert nicht mehr auf neue Anforderungen, wenn zu viele festgefahrene Threads vorhanden sind - aber in Ihrem Fall sind sie nicht wirklich "festgefahren", sondern verarbeiten lange Anfragen. Ein besserer Ansatz besteht darin, dem FileDownloadServlet seinen eigenen Thread-Pool zu geben - auf WL10 ist dies ein dedizierter WorkManager. Dies stellt sicher, dass alle im Download festgestellten/betroffenen Threads keinen Einfluss auf den Rest des Servers haben, der normale Anfragen bearbeitet. Weitere Informationen finden Sie hier - http://download.oracle.com/docs/cd/E11035_01/wls100/config_wls/self_tuned.html#wp1059038. Sie können eine Versandrichtlinie für dieses Servlet definieren. – JoseK

+0

Vielen Dank für die Antwort und Klarstellungen. – doublep

7

Die WLS10 WorkManager-Dokumentation kann zu echtem Kopfkratzen führen. Ein schrittweises Beispiel für die Definition eines WorkManagers für eine Webanwendung in weblogic.xml und die Zuweisung eines bestimmten Servlets zur Verwendung finden Sie unter http://blogs.oracle.com/jamesbayer/2010/01/work_manager_leash_for_slow_js.html.

in diesem Beispiel hinzufügen, können Sie <ignore-stuck-threads>true</ignore-stuck-threads> zum <work-manager> Definition hinzuzufügen, die für das Workarbeitsfäden verhindern sollte gegen einen ausgefallenen Server Zustand gezählt.

+1

Genau das, was ich gesucht habe, danke! –