【问题标题】:Tomcat maxThreads is config for acceptor threads or Request processing threadsTomcat maxThreads 是接受线程或请求处理线程的配置
【发布时间】:2021-07-04 09:24:06
【问题描述】:
  1. 我关注oracle doc 并想知道tomcat maxThreads 配置是做什么用的?接受者线程还是请求处理线程?

  2. 作为 oracle 文档

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

要做什么:它是 pop() 队列中的连接并处理此连接,还是请求处理线程仅侦听来自连接队列中的连接的请求?

谢谢

【问题讨论】:

  • 这能回答你的问题吗? Tomcat - maxThreads vs maxConnections
  • 我想您知道 Oracle iPlanet Web Server 和 Tomcat 是两个不同的产品。 Tomcat Coyote 始终有一个接受者线程和一个请求处理线程池,但是这两者之间的交互细节取决于端点类型(BIO(在 8.5 中删除)、NIO、NIO2 或 APR)。您能否说明您对哪种端点类型感兴趣?
  • @PiotrP.Karwasz 这是我的错误,我的意思是 tomcat coyote nio,你能解释一下当对 tomcat 服务器的请求运行 spring boot 应用程序时会发生什么,谢谢

标签: tomcat webserver


【解决方案1】:

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

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

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

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

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

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

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

【讨论】:

    猜你喜欢
    • 2014-11-16
    • 1970-01-01
    • 2011-08-03
    • 1970-01-01
    • 2013-05-30
    • 2015-03-27
    • 1970-01-01
    • 2021-04-09
    • 1970-01-01
    相关资源
    最近更新 更多