[英]Apache + Tomcat with mod_jk: maxThread setting upon load balancing
我在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
吗?
谢谢
将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)越过此数字会抛出Connection Refused错误,直到资源可用于处理它们。
所以你应该没事,直到你完成第3步
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.