2015-08-12 5 views
7

Frage zu WebSphere und nichts in der Dokumentation finden ...Was passiert, wenn der WebContainer-Threadpool (WebSphere) vollständig verwendet wird und eine neue Anforderung empfangen wird?

Was passiert, wenn der WebContainer-Thread-Pool vollständig verwendet wird und eine neue Anfrage empfangen wird? Ich spreche von der Situation, wenn alle verwendet werden und wir die maximale Thread-Pool-Größe erreicht haben, was bedeutet, dass keine neue erstellt werden kann, um die Anfrage zu verarbeiten.

Wird die Anfrage: - sofort fehlschlagen und die Antwort wird eine Art von Fehler enthalten? - WAS wird irgendwie die Anfrage für einen bestimmten Zeitraum "in die Warteschlange stellen" und sie verarbeiten, wenn einer der Threads wieder im Pool ist? Eine Art Fehler/Timeout kann immer noch auftreten, wenn die Wartezeit zu lang ist? - WAS wird die Anfrage auf unbestimmte Zeit "in die Warteschlange stellen" und die Zeitüberschreitung kann nur auf der Benutzerseite (Webbrowser/App) passieren?

Antwort

7

Das genaue Verhalten ist wahrscheinlich nicht dokumentiert, so dass die Details zwischen Releases geändert werden können, um das Verhalten zu verbessern. Sie können das Verhalten wahrscheinlich schließen, indem du javacores suchen oder von Informationen aus verschiedenen Dokumenten, zum Beispiel des BoundedBuffer Abschnitts dieses IBM WebSphere Application Server Performance Cookbook Dokument Nachlese:

Der Thread-Pool Anforderungspuffer ist im Wesentlichen ein Rückstau vor den Thread-Pool . Wenn der Thread-Pool seine maximale Größe hat und alle Threads von ausgelöst werden, wird Arbeit in dem RequestBuffer Warteschlange. Die maximale Größe des requestBuffer ist gleich dem Thread-Pool maximale Größe; Wenn jedoch die Arbeitseinheit auf dem Faden-Pool mit einem blockierenden Modus EXPAND_WHEN_QUEUE_IS_FULL_ERROR_AT_LIMIT oder EXPAND_WHEN_QUEUE_IS_FULL_WAIT_AT_LIMIT ausgeführt wird, dann ist die maximale Größe ist ThreadPoolMaxSize * 10. Wenn die Request füllt, dann WSVR0629I ausgegeben wird (obwohl nur die ersten Zeit dies geschieht pro JVM Lauf pro Thread-Pool). Wenn der requestBuffer voll ist, wird entweder warten oder eine ThreadPoolQueueIsFullException werfen, abhängig davon, wie die Arbeitseinheit ausgeführt wird.

In der Praxis bedeutet das, nachdem maxThreads Fäden belegt sind Ausführung der Arbeit, eine zusätzliche maxThreads Anfragen werden in einem beschränkten Puffer eine Warteschlange eingereiht werden, und wenn dieser Puffer voll ist, wird die Buchse Thread blockiert, bis es die Arbeitsschlange kann, Das bedeutet, dass weitere eingehende Anforderungen blockiert werden, bis ein Thread verfügbar wird und Speicherplatz im begrenzten Puffer freigibt.

+0

Macht Sinn - danke. Ich bin mir nicht sicher, warum ich den von Ihnen zitierten Text nicht finden konnte. – Michal123456

+0

Nun, ich habe mehrere Jahre an der Thread-Pool-Komponente gearbeitet, also wusste ich, wie das Verhalten war, also wusste ich, wonach ich suchen sollte. Die Verbindung, die ich gab, ist nicht einmal im WAS-Wissenszentrum, also scheint es, dass die Informationen gerade schwer zu finden sind ... –

+0

Ich war ziemlich überrascht, dass es nicht dokumentiert ist. Es scheint sehr wichtig zu wissen, ob die Anfragen in der Warteschlange stehen oder mit einem Fehler verworfen werden. Danke für die Hilfe :-) – Michal123456

Verwandte Themen