我在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
吗?
由于
答案 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步