繁体   English   中英

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

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM