Tomcat 8 NIO,它是如何工作的?

Alm*_*zak 2 java tomcat8

我创建了简单的 Spring Boot MVC 应用程序并注意到(使用JVisualVM)我所有的线程都有前缀 nio。这意味着Tomcat使用java.nio包。我们可以添加以下PARAMS到Tomcat的配置:maxThreads,maxConnections。据我所知,这意味着:例如我们有maxThreads= 2 , maxConnections= 10000,那么第一个线程的 Selector (from java.nio) 可以处理10000并发请求,但根据每个顺序执行selectorKeys第二个线程的相同行为。

它是否以这种方式工作,如果是,您通常如何选择最佳选项? maxConnections

预先感谢

(顺便说一句,我使用 Tomcat 8)

jsp*_*cal 8

客户端连接的最大数量为acceptCount+ maxConnections。太低,请求可能会被不必要地拒绝。太高,如果吞吐量跟不上,客户端可能会饿死。

acceptCount:-默认为100 -此被用作backlog用于参数ServerSocket.bind。操作系统的 TCP 堆栈最多将排队acceptCount等待挂起的套接字连接。这发生在 Tomcat 开始处理连接之前。

maxConnections: - 默认为 10,000 - Tomcat 允许在内部进行的最大连接数。

maxThreads: - 在 NIO 和 NIO2 下默认为 200 - 并发请求处理线程的最大数量。

目标是优化服务可用性和性能并有效利用资源。这些设置将取决于您的请求处理器的延迟和负载分布。

根据目标的不同,有许多不同的容量规划方法。一个简单的选择是增加到maxThreads服务器无法在合理的时间内安全处理任何额外请求的程度。在这个饱和点,接受更多连接是不可取的,因为清除它们需要很长时间。因此,请考虑每个处理线程需要多少 CPU 时间和 RAM,以及有多少可以安全地同时运行。