当前位置: 首页 > 知识库问答 >
问题:

Tomcat和acceptCount不工作

米嘉禧
2023-03-14

我正在使用Tomcat8作为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认为的那样)。它只是意味着它将在两种情况下都有其效果:当所有处理线程都很忙时,以及当所有可用连接都耗尽时。(即使那个人是正确的,这也意味着Tomcat文档在定义AcceptCount时是完全错误的...)

那为什么会被忽视呢?我发现了一些讨论,人们声称acceptCount对他们不起作用,但没有找到实际的讨论:(甚至相反,我能够找到一些关于Tomcat在300个连接后如何窒息的抱怨(这正是默认的maxThreads+acceptCount)。所以我可以看到,对一些人来说,它是有效的,对一些人来说,我被要求相信“也许”它不是。对我来说也不是。我应该相信Tomcat手册是错误的,因为这个选项并不总是受到尊重吗?

共有1个答案

汤飞翮
2023-03-14

所有这些设置之间存在着复杂的关系,而且它们因连接器的选择而变得更加复杂(例如BIO,NIO,APR等)。

生物连接器基本上死了...它在Tomcat 8.0.x之后就不存在了。它不能接受任何超过线程池一次可以处理的连接。因此,BIO连接器实际上使maxconnections==maxthreads。因此,对于BIO连接器,服务器愿意接受的连接数应该是maxconnections+acceptcount,但是maxconnections限制在相对较小的数量。

其他更复杂的连接器允许在TCP/IP Sense中每个线程接受多个连接。maxconnections的默认值接近10K(根据确切的类型而变化),线程池大小与此无关,因此服务器愿意接受的连接数为maxconnections+acceptcount

非生物连接器可以接受更多连接的原因是,不需要活动请求处理线程的两种状态(等待下一个HTTP-KeepAlive-request-usingread()和等待下一个连接-usingaccept())是由单独的线程完成的,这使得请求处理线程可以尽快返回池中,以便为其他请求提供服务。

foreach(i from 0..10301)
    conn[i] = connect('host:port')

**阅读部分评论后更新**

我希望能够同时处理200个请求,但Tomcat很乐意在内部排队另外800个请求。AcceptQueue中的另外200个由操作系统的TCP/IP堆栈排队,而不是由Tomcat/Java排队

假设客户端上有无限的读取超时,我希望您能够启动1201个curl实例,其中门中的前200个立即获得一个线程(并Hibernate),接下来的800个在Tomcat/Java中排队,接下来的200个在TCP/IP堆栈中排队,实例#1201获得“连接拒绝”响应。

完成第一组200个请求后,Tomcat将处理另一批200个请求,TCP/IP队列中的200个连接将从该队列转移到Tomcat/Java队列,20秒后,第二组200个请求将完成。这将重复进行,直到所有1200个初始请求都向其客户端返回响应。1200个请求中只有1个将被拒绝。

 类似资料:
  • 我阅读了很多关于如何配置tomcat来使用SSL的教程。 我在http://localhost:8080和http://localhost:8443中访问我的应用程序,但我不能在https://localhost:8443中访问。 我用的是阿帕奇语。 key.keystore文件可以工作,因为它在其他JBoss应用程序中使用。 Bellow是server.xml配置中的新连接器。

  • null 我知道web HTTP请求配置在大多数情况下与数据库池配置无关,但是对于属性之间的比例(maxthreads/acceptcount、maxActive)是否有常见的情况/实践?例如。HTTP maxThreads比DB maxActive大是一种常见的做法吗(但是根据我们的示例,认为100%大是太多了--可以假设20%或50%的最大值?),假设我们有一个更大的值的accpetCount

  • 我试图在Tomcat 7中部署我的Spring引导应用程序,但当我启动我的Tomcat服务器时,我会出现以下错误: 我的Pom。xml文件: 奇怪的是,当我在Tomcat 8中部署war文件时,它工作得很好! 如果有什么建议,请不要犹豫。 非常感谢。 PS:我在用JAVA 8

  • 将感谢任何关于我们应该如何处理这一点的提示!

  • 如果我使用Main从测试类测试Log4j,它就能正常工作。但是当我使用Servlet项目时,日志文件不会被创建。 我正在使用Apache和Tomcat处理Eclipse 首先,我认为问题出在log4j.properties文件上。我从src目录移动到Webcontent目录。然后我再次移动到Webcontent目录内的classes目录。但我不工作。

  • 更新:清理并直接指出问题和解决方案。 问题: Docker-tomcat已正确安装并运行,但Manager应用程序中的403访问错误除外。我的docker tomcat似乎也找不到我的tomcat-users.xml配置。 解决方案 感谢Farhad和Sanket的回答。 [文件]: DockerFile Tomcat用户配置(conf/tomcat-users.xml) 应用程序上下文(weba