【发布时间】:2018-10-09 07:25:24
【问题描述】:
我正在使用 tomcat 8 作为 Spring Boot 项目的一部分,我的 acceptCount 设置似乎不起作用。我的服务器不仅接受 300 个连接,还接受了我扔给它的近 1000 个连接,当然同时处理的连接不超过 200 个。
Tomcat 文档在 acceptCount 上似乎很清楚:“当所有可能的请求处理线程都在使用时,传入连接请求的最大队列长度。队列已满时收到的任何请求都将被拒绝。”但显然这不会发生。
当然还有另一个设置,maxConnections,它的文档说:“请注意,一旦达到限制,操作系统可能仍会根据 acceptCount 设置接受连接” - 但仅此注释并不意味着 acceptCount是“基于 maxConnections,而不是 maxThreads”(就像 https://coderanch.com/t/647733/application-servers/Tomcat-BIO-connector-configurations 的 topicstarter 认为的那样)。它只是意味着它在两种情况下都会产生影响:当所有处理线程都忙时,以及当所有可用连接都用尽时。 (即使那个人是正确的,那也意味着定义 acceptCount 时 Tomcat 文档是完全错误的......)
那为什么会被忽略呢?我发现了一些讨论,人们据称声称 acceptCount 对他们不起作用,但没有找到实际的讨论:(即使相反,我也能找到一些抱怨 Tomcat 在 300 个连接后如何阻塞(这完全是默认设置) maxThreads + acceptCount)。所以我可以看到它对某些人有效,并且我被要求相信“也许”对某些人不起作用。对我来说也不是。我是否应该相信 Tomcat 手册在某种意义上是错误的这个选项并不总是得到尊重?
【问题讨论】:
-
顺便说一句,我如何检测到连接已被接受。我使用 curl 以详细模式发送请求(并行执行的许多 curl 实例),并计算其中有多少报告已建立连接。他们中的大多数甚至报告发送了一个请求,但我们当然不能确定他们是否意味着刚刚开始发送,或者实际上完成了将请求正文推送到一个 socked 中。
-
发布您的有效配置,并说明您的测试方法。
-
我在下面的 cmets 中提供了更多详细信息。
标签: tomcat spring-boot tomcat8