带有mod_jk的Apache + Tomcat:负载平衡时的maxThread设置

时间:2010-07-05 11:34:11

标签: apache tomcat multithreading load-balancing mod-jk

我在2台服务器上安装了带有mod_jk的Apache + Tomcat。每个服务器都有自己的Apache + Tomcat对,每个请求由2台服务​​器上的Tomcat负载平衡工作者提供服务。

我有一个关于如何设置Apache的maxClient和Tomcat的maxThread的问题。

默认数字是, Apache: maxClient=150, Tomcat: maxThread=200

在这种配置中,如果我们只有1个服务器设置,那么它可以正常工作,因为Tomcat工作者永远不会一次接收超过150个的传入连接。但是,如果我们在两台服务器之间进行负载平衡,那么Tomcat工作者是否可能收到150 +(来自另一台服务器的某些数字)并使maxThread溢出为SEVERE: All threads (200) are currently busy

如果是这样,我应该在这种情况下设置Tomcat的maxThread=300吗?

由于

1 个答案:

答案 0 :(得分: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)越过这个号码会抛出连接被拒绝的错误,直到资源可用来处理它们。

所以你应该没事,直到你点击第3步