代码之家  ›  专栏  ›  技术社区  ›  Michal123456

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

  •  8
  • Michal123456  · 技术社区  · 9 年前

    对WebSphere有疑问,但在文档中找不到任何内容。。。

    当WebContainer线程池被完全使用并且收到新请求时会发生什么?我说的是当所有线程都被使用并且我们达到了最大线程池大小时的情况,这意味着可能不会创建新的线程池来处理请求。

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

    1 回复  |  直到 9 年前
        1
  •  9
  •   Brett Kail    9 年前

    确切的行为可能没有记录,因此可以在不同版本之间更改详细信息,以改进行为。您可以通过查看javacores或从各种文档中收集信息来推断行为,例如 IBM WebSphere Application Server Performance Cookbook 文件:

    线程池请求缓冲区本质上是 线程池。如果线程池达到其最大大小 线程被调度,然后工作将在requestBuffer中排队。 requestBuffer的最大大小等于线程池 最大尺寸;但是,如果工作单元在线程上执行 阻塞模式为EXPAND_WWHEN_QUEUE_IS_FULL_ERROR_AT_LIMIT的池 或EXPAND_WWHEN_QUEUE_IS_FULL_WAIT_AT_LIMIT,则最大大小为 ThreadPoolMaxSize*10。当requestBuffer填满时 WSVR0629I已发出(尽管每个JVM只有第一次发出 每个线程池运行)。当requestBuffer已满时,工作将 等待或抛出ThreadPoolQueueIsFullException,具体取决于 执行工作单位。

    在实践中,这意味着在maxThreads线程忙于执行工作之后,额外的maxThreads请求将在有界缓冲区中排队,当该缓冲区已满时,套接字线程将阻塞,直到它可以对工作进行排队,这意味着您将阻塞更多的传入请求,直到线程变为可用并在有界的缓冲区中腾出空间。