首页 > 解决方案 > Tomcat maxThreads 是接受线程或请求处理线程的配置

问题描述

  1. 我关注oracle doc,想知道 tomcat maxThreads 配置是做什么用的?接受者线程或请求处理线程?

  2. 作为 oracle 文档

线程池中的请求处理线程然后从队列中获取连接并为请求提供服务。

在此处输入图像描述

拾取做什么:它是否弹出()队列中的连接并处理此连接或请求处理线程仅侦听来自连接队列中的连接的请求?

谢谢

标签: tomcatwebserver

解决方案


正如问题Tomcat - maxThreads vs maxConnections中所解释的,该maxThreads属性是Executor用于处理请求的大小。maxThreads最多将同时处理多个请求。

在 Tomcat 8.5 及更高版本上,所有连接器类型也使用一个接受器线程,它只接受最多maxConnections连接。超出限制的那些连接仍保留在操作系统的队列中(该acceptCount属性是操作系统对此类队列首选大小的提示)。

然而,Tomcat Coyote 架构的其余部分与 Oracle iPlanet Web Server 的架构明显不同,并且取决于所使用的连接器类型。

您可以在本文中阅读 NIO 连接器的详细信息。基本上:

  • 服务器通过使用Selectors 轮询套接字来对网络事件做出反应。这样一个线程可以为所有客户端连接提供服务。

  • 只有 3 个线程处理网络 I/O:

    1. Acceptor它只接受新的连接并将它们发送给轮询器,
    2. the Poller,它响应读/写事件并将它们分派给请求执行器,
    3. the BlockPoller,它在9.0.47版本中消失并处理了对ServletInputStreamand的阻塞操作ServletOutputStream。接受了它的Poller任务。
  • 没有连接队列。上面提到的线程只是将Runnable任务提交给执行者。executor 内部有一个Runnables 队列,每个线程在空闲时从那里选择一个任务。


推荐阅读