2015-08-12 38 views
7

Hai domande su WebSphere e non riesci a trovare nulla nella documentazione ...Cosa succede quando il pool di thread WebContainer (WebSphere) è completamente utilizzato e viene ricevuta una nuova richiesta?

Cosa succede quando il pool di thread WebContainer è completamente utilizzato e viene ricevuta una nuova richiesta? Sto parlando della situazione in cui tutti vengono utilizzati e abbiamo raggiunto la dimensione massima del pool di thread, il che significa che non è possibile creare uno nuovo per elaborare la richiesta.

La richiesta: - ha esito negativo immediatamente e la risposta conterrà qualche tipo di errore? - WAS in qualche modo "accoderà" la richiesta per un determinato periodo e la elaborerà quando uno dei thread è di nuovo nel pool? Potrebbe esserci ancora qualche tipo di errore/timeout se il tempo di attesa è troppo lungo? - WAS "accoderà" la richiesta a tempo indeterminato e il timeout potrebbe avvenire solo dal lato utente (browser/app)?

risposta

7

Il comportamento esatto è probabilmente non documentato in modo che i dettagli possano essere modificati tra le versioni al fine di migliorare il comportamento. Si può probabilmente dedurre il comportamento, cercando in javacores o raccogliere informazioni dai vari documenti, ad esempio la sezione BoundedBuffer di questo IBM WebSphere Application Server Performance Cookbook documento: richiesta

Il pool di thread di buffer è essenzialmente un arretrato di fronte a pool di thread . Se il pool di thread ha le dimensioni massime e tutti i thread vengono inviati, il lavoro verrà accodato nel requestBuffer. La dimensione massima del requestBuffer è uguale alla dimensione massima del pool di thread ; Tuttavia, se l'unità di lavoro viene eseguito sul thread pool con una modalità di blocco EXPAND_WHEN_QUEUE_IS_FULL_ERROR_AT_LIMIT o EXPAND_WHEN_QUEUE_IS_FULL_WAIT_AT_LIMIT, allora la dimensione massima è ThreadPoolMaxSize * 10. Quando il requestBuffer riempie, quindi WSVR0629I viene rilasciato (anche se solo la prima il tempo si verifica per JVM eseguito per pool di thread). Quando il requestBuffer è pieno, il lavoro sarà in attesa o genererà un oggetto ThreadPoolQueueIsFullException, a seconda di come viene eseguita l'unità di lavoro .

In pratica, ciò significa dopo MaxThreads fili sono occupati esecuzione lavoro, un MaxThreads ulteriori richieste verranno accodate in un buffer limitato, e quando tale buffer è pieno, il filo presa bloccherà fino in coda il lavoro, il che significa che ulteriori richieste in entrata saranno bloccate fino a quando un thread non sarà disponibile e farà spazio nel buffer limitato.

+0

Ha senso - grazie. Non sono sicuro del motivo per cui non sono riuscito a trovare il testo che hai citato. – Michal123456

+0

Beh, ho lavorato al componente del pool di thread WAS per diversi anni, quindi sapevo quale fosse il comportamento, quindi sapevo cosa cercare. Il link che ho dato non è nemmeno nel centro di conoscenza di WAS, quindi sembra che l'informazione sia difficile da trovare ... –

+0

Sono rimasto piuttosto sorpreso dal fatto che non sia documentato. Sembra molto importante sapere se le richieste vengono accodate o scartate con errori. Grazie per l'aiuto :-) – Michal123456