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

时间:2015-08-12 16:18:27

标签: java web-applications websphere threadpool web-container

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

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

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

1 个答案:

答案 0 :(得分:9)

确切的行为可能没有记录,因此可以在版本之间更改细节以改善行为。您可以通过查看javacores或从各种文档中收集信息来推断行为,例如此IBM WebSphere Application Server Performance Cookbook文档的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请求将在有界缓冲区中排队,当该缓冲区已满时,套接字线程将阻塞,直到它可以对工作进行排队,这意味着进一步的传入请求将被阻塞,直到线程可用并在有界缓冲区中腾出空间。