Apache + Tomcat结合使用mod_jk进行负载均衡:maxThread设置

6
我有2个服务器,每个服务器都安装了Apache+Tomcat和mod_jk。每个请求都由2个服务器上的Tomcat负载均衡工作程序提供服务。
我有一个关于如何设置Apache的maxClient和Tomcat的maxThread的问题。
默认值为: Apache: maxClient=150, Tomcat: maxThread=200
在这种配置中,如果我们只有1个服务器,则Tomcat工作程序永远不会一次接收超过150个传入连接。但是,如果我们在2个服务器之间进行负载平衡,是否可能出现Tomcat工作程序接收到150 +(来自另一个服务器的某些数字)并使maxThread溢出为“SEVERE:All threads (200) are currently busy”?
如果是这样,那么在这种情况下,我应该将Tomcat的maxThread设置为300吗?
谢谢

在您的2台服务器设置中,如何在两个Apache之间进行负载平衡? - JoseK
这是由路由器完成的。但它不会根据流量大小进行任何过滤。因此,每个Apache可以同时接收150个请求(甚至更多)。 - c4il
1个回答

7

将maxThreads设置为300应该没问题 - 没有固定的规则。这取决于是否看到有任何连接被拒绝。

增加太多会导致高内存消耗,但是生产Tomcats已知可以运行750个线程。在此处也可以查看。 http://java-monitor.com/forum/showthread.php?t=235

你实际上是否收到了SEVERE错误?我已经在我们的Tomcat 6.0.20上进行了测试,并在超过maxThreads时抛出INFO消息。

INFO: Maximum number of threads (200) created for connector with address null and port 8080

它在超过 acceptCount 值之前不会拒绝连接。默认值为 100。
来自 Tomcat 文档 http://tomcat.apache.org/tomcat-5.5-doc/config/http.html 当所有可能的请求处理线程都在使用时,用于传入连接请求的最大队列长度。当队列已满时,任何收到的请求都将被拒绝。默认值为 100。
工作原理如下:
1)随着同时请求数量的增加,将创建线程,直到达到配置的最大值(maxThreads 属性的值)。
因此,在您的情况下,此时将出现消息“已创建最大线程数(200)”。但是请求仍将排队等待服务。
2)如果仍然收到更多同时请求,则将它们排队,直到达到配置的最大值(acceptCount 属性的值)。
因此,总共可以接受 300 个请求而不会失败。(假设您的 acceptCount 为默认值 100)

3) 当超过这个数字时,会出现连接被拒绝的错误,直到有足够的资源来处理它们。

所以在进行第三步之前,您应该没有问题。


acceptCount这个点非常好!这应该完美地发挥作用。抱歉,我在我的问题中应该表述得更清楚,但它是我一般性的假设性问题。我最初将maxThread设置为150,并获得了严重的错误。所以我改回了默认值200,但后来我意识到,正如我在问题中描述的那样,200也不足够。非常感谢您的答案。现在一切都清楚了。 - c4il

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接