Mak*_*rov 5 tomcat tomcat8 spring-boot
我正在使用 tomcat 8 作为 Spring Boot 项目的一部分,但我的acceptCount 设置似乎不起作用。我的服务器不是只接受 300 个连接,而是接受了我向它抛出的近 1000 个连接,当然同时处理的连接数不超过 200 个。
Tomcat文档似乎对acceptCount很清楚:“当所有可能的请求处理线程都在使用时,传入连接请求的最大队列长度。队列已满时收到的任何请求都将被拒绝。” 但显然这不会发生。
当然还有另一个设置,maxConnections,其文档说:“请注意,一旦达到限制,操作系统仍可能接受基于acceptCount设置的连接” - 但仅此注释并不意味着acceptCount是“count”在 maxConnections 之上,而不是 maxThreads 之上”(就像https://coderanch.com/t/647733/application-servers/Tomcat-BIO-connector-configurations上的 topicstarter认为的那样)。它只是意味着它在两种情况下都会产生影响:当所有处理线程都繁忙时,以及当所有可用连接都耗尽时。(即使那个人是正确的,这也意味着 Tomcat 文档在定义 AcceptCount 时是完全错误的......)
那为什么会被忽略呢?我发现一些讨论中人们声称acceptCount对他们不起作用,但没有找到实际的讨论:(即使相反,我也能找到一些关于Tomcat在300个连接后如何阻塞的抱怨(这正是默认值) maxThreads +acceptCount)。所以我可以看到,对于某些人来说它有效,而我被要求相信“也许”对于某些人来说它不起作用。对我来说也不是。我是否应该相信 Tomcat 手册在某种意义上是错误的这个选择并不总是得到尊重?
所有这些设置之间都存在复杂的关系,并且由于您选择的连接器(例如 BIO、NIO、APR 等),它们变得更加复杂。
BIO 连接器本质上已经死了……它在 Tomcat 8.0.x 之后就不存在了。它接受的连接数不能超过线程池一次可以处理的连接数。因此,BIO 连接器本质上使maxConnections == maxThreads. 因此,对于BIO连接器来说,服务器愿意接受的连接数应该是maxConnections+ acceptCount,但maxConnections仅限于一些相对较小的数量。
其他连接器更复杂,在 TCP/IP 意义上允许每个线程接受maxConnections多个连接。默认值接近 10k(因具体类型而异),并且线程池大小不相关,因此服务器愿意接受的连接数是maxConnections+ acceptCount。
非 BIO 连接器可以接受更多连接的原因是因为不需要活动请求处理线程的两种状态(等待下一个 HTTP-keepalive-request - usingread()和等待下一个连接 - using accept())是由单独的线程完成,允许请求处理线程尽快返回池中以便为其他请求提供服务。
如果您使用的是 BIO,我预计连接会在例如 300 个连接后失败(您没有发布您的配置,因此不可能说出实际数字是多少),但对于 NIO,我预计它会向北10k 个连接。
对于测试,重要的是您实际上不要对连接执行任何操作,以便正确计算它们。基本上,你需要这样做:
foreach(i from 0..10301)
conn[i] = connect('host:port')
Run Code Online (Sandbox Code Playgroud)
您应该发现有些i服务器不会接受连接。如果您连接并发出,GET /那么服务器将做出响应,并且连接和请求处理线程将返回到各自的池中。
**阅读一些评论后更新**
我希望能够同时处理 200 个请求,但 Tomcat 会很乐意在内部对另外 800 个请求进行排队。中的额外 200 个acceptQueue正在由操作系统的 TCP/IP 堆栈排队,而不是由 Tomcat/Java 排队
假设客户端无限读取超时,我希望您能够启动 1201 个实例,其中curl门中的前 200 个立即获得线程(并睡眠),接下来的 800 个在 Tomcat/Java 中排队,下一个200 在 TCP/IP 堆栈中排队,实例 #1201 收到“连接被拒绝”响应。
一旦第一组 200 个请求完成,Tomcat 将处理另一批 200 个请求,TCP/IP 队列中的 200 个连接将从该队列移至 Tomcat/Java 队列,20 秒后处理第二组 200 个请求将完成。这将重复进行,直到所有 1200 个初始请求都向其客户端返回响应。1200 个请求中只有 1 个会被拒绝。
| 归档时间: |
|
| 查看次数: |
4661 次 |
| 最近记录: |