完全使用WebContainer线程池(WebSphere)并收到新请求后会发生什么?

Mic*_*456 9 java websphere web-applications web-container threadpool

对WebSphere有疑问,无法在文档中找到任何内容......

完全使用WebContainer线程池并收到新请求后会发生什么?我正在讨论使用所有情况并且达到最大线程池大小的情况,这意味着可能无法创建新的线程池来处理请求.

请求是否: - 立即失败,响应将包含某种错误? - WAS会以某种方式"排队"给定时间段的请求并在其中一个线程返回池中时处理它?如果等待时间太长,仍可能发生某种错误/超时? - WAS将无限期地"排队"请求,并且超时可能只发生在用户端(Web浏览器/应用程序)?

Bre*_*ail 10

确切的行为可能没有记录,因此可以在版本之间更改细节以改善行为.您可以通过查看javacores或从各种文档中收集信息来推断行为,例如此IBM WebSphere Application Server性能手册文档的BoundedBuffer部分:

线程池请求缓冲区本质上是线程池前面的积压.如果线程池处于其最大大小并且所有线程都已分派,则工作将在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请求将在有界缓冲区中排队,并且当该缓冲区已满时,套接字线程将阻塞,直到它可以对工作进行排队,这意味着进一步的传入请求将被阻塞,直到一个线程可用并在有界缓冲区中腾出空间.