Tomcat maxThreads 是接受线程或请求处理线程的配置
Posted
技术标签:
【中文标题】Tomcat maxThreads 是接受线程或请求处理线程的配置【英文标题】:Tomcat maxThreads is config for acceptor threads or Request processing threads 【发布时间】:2021-07-04 09:24:06 【问题描述】:我关注oracle doc 并想知道tomcat maxThreads 配置是做什么用的?接受者线程还是请求处理线程?
作为 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 应用程序时会发生什么,谢谢 【参考方案1】:正如问题Tomcat - maxThreads vs maxConnections 中所解释的,maxThreads
属性是用于处理请求的Executor
的大小。最多同时处理maxThreads
个请求。
在 Tomcat 8.5 及更高版本上,所有连接器类型还使用接受器线程,它最多只能接受 maxConnections
连接。那些超出限制的连接仍保留在操作系统的队列中(acceptCount
属性是操作系统对此类队列首选大小的提示)。
但是,Tomcat Coyote 的其余架构明显不同于 Oracle iPlanet Web Server,并且取决于所使用的连接器类型。
您可以在this article阅读NIO连接器的详细信息。基本上:
服务器通过使用Selector
s 轮询套接字来响应网络事件。这样一个线程就可以为所有客户端连接提供服务。
只有 3 个线程处理网络 I/O:
Acceptor
,它只接受新连接并将它们发送给轮询器,
Poller
,它响应读/写事件并将它们分派给请求执行器,
BlockPoller
,在版本9.0.47 中消失并处理ServletInputStream
和ServletOutputStream
上的阻塞操作。 Poller
接受了它的任务。
没有连接队列。上面提到的线程只是将Runnable
任务提交给执行器。执行器内部有一个Runnable
s 队列,每个线程在空闲时从那里挑选一个任务。
【讨论】:
以上是关于Tomcat maxThreads 是接受线程或请求处理线程的配置的主要内容,如果未能解决你的问题,请参考以下文章
Tomcat调优及acceptCountmaxConnections与maxThreads参数的含义和关系
Tomcat调优及acceptCountmaxConnections与maxThreads参数的含义和关系