6

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

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

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

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

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

谢谢

4

1 回答 1

7

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

增加太多会导致高内存消耗,但众所周知,生产 Tomcat 使用 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 步

于 2010-07-07T06:29:07.753 回答