2015-08-12 7 views
7

У вас возникли вопросы о WebSphere и ничего не нашли в документации ...Что происходит, когда пул потоков WebContainer (WebSphere) полностью используется и получен новый запрос?

Что происходит, когда пул потоков WebContainer полностью используется и получен новый запрос? Я говорю о ситуации, когда все используются, и мы достигли максимального размера пула потоков, что означает, что новый не может быть создан для обработки запроса.

Будет ли запрос: - сбой немедленно и ответ будет содержать какую-то ошибку? - WAS каким-то образом «поставит» запрос на заданный период и обработает его, когда один из потоков вернется в пул? Может возникнуть некоторая ошибка/таймаут, если время ожидания слишком велико? - WAS будет «очереди» на неопределенный срок, а таймаут может произойти только на стороне пользователя (веб-браузер/приложение)?

ответ

7

Точное поведение, вероятно, недокументировано, так что детали могут быть изменены между релизами, чтобы улучшить поведение. Вы, вероятно, можете сделать вывод, поведение, глядя на javacores или подбирая информацию из различных документов, например, раздел BoundedBuffer этого IBM WebSphere Application Server Performance Cookbook документа:

Нити пула буферов запроса по существу накопившийся перед нитью бассейна , Если пул потоков имеет максимальный размер и все , потоки отправляются, тогда работа будет стоять в очереди в requestBuffer. Максимальный размер requestBuffer равен пулу потоков максимальный размер; Однако, если единицы работы выполняется на поток пула с режимом блокировки EXPAND_WHEN_QUEUE_IS_FULL_ERROR_AT_LIMIT или EXPAND_WHEN_QUEUE_IS_FULL_WAIT_AT_LIMIT, то максимальный размер ThreadPoolMaxSize * 10. Когда requestBuffer заполняется, то WSVR0629I выдается (хотя только первый время это происходит за JVM за пул потоков). Когда requestBuffer будет заполнен, работа будет либо ждать, либо бросать исключение ThreadPoolQueueIsFullException, в зависимости от того, как выполняется произведение работы .

На практике это означает, что после того, как MaxThreads потоки заняты выполнением работ, дополнительно MaxThreads запросы будут поставлены в очередь в ограниченном буфере, и когда этот буфер заполнен, то сокет поток будет блокировать до тех пор, пока не может в очереди на работу, это означает, что дальнейшие входящие запросы будут заблокированы до тех пор, пока поток не станет доступным и не сделает пространство в ограниченном буфере.

+0

Имеет смысл - спасибо. Не знаю, почему я не смог найти текст, который вы указали. – Michal123456

+0

Ну, я работал над компонентом пула потоков WAS в течение нескольких лет, поэтому я знал, что такое поведение, поэтому я знал, что искать. Ссылка, которую я дал, даже не в центре знаний WAS, поэтому кажется, что информация просто трудно найти ... –

+0

Я был очень удивлен, что это не документировано. Похоже, очень важно знать, поставлены ли запросы в очередь или отброшены с ошибкой. Спасибо за помощь :-) – Michal123456