对WebSphere有疑问,无法在文档中找到任何内容......
完全使用WebContainer线程池并收到新请求后会发生什么?我正在讨论使用all并且达到最大线程池大小的情况,这意味着可能无法创建新的线程池来处理请求。
请求是否: - 立即失败,响应将包含某种错误? - WAS会以某种方式"排队"给定时间段的请求,并在其中一个线程回到池中时处理它?如果等待时间太长,仍可能发生某种错误/超时? - WAS将"排队"请求无限期,超时可能只发生在用户端(Web浏览器/应用程序)?
答案 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请求将在有界缓冲区中排队,当该缓冲区已满时,套接字线程将阻塞,直到它可以对工作进行排队,这意味着进一步的传入请求将被阻塞,直到线程可用并在有界缓冲区中腾出空间。