带有 mod_jk : maxThread setting upon load balancing 的 Apache + Tomcat

标签 apache tomcat multithreading load-balancing mod-jk

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

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

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

在此配置中,如果我们只有 1 个服务器设置,它会工作得很好,因为 Tomcat worker 永远不会同时接收超过 150 个传入连接。但是,如果我们在 2 个服务器之间进行负载平衡,Tomcat worker 是否有可能接收到 150 +(来自另一台服务器的一些数字)并使 maxThread 溢出为 SEVERE:所有线程 (200) 当前正忙?

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

谢谢

最佳答案

将 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

The maximum queue length for incoming connection requests when all possible request processing threads are in use. Any requests received when the queue is full will be refused. The default value is 100.

它的工作方式是

1) 随着并发请求数量的增加,线程将被创建到配置的最大值(maxThreads 属性的值)。

因此,在您的情况下,此时将出现消息“创建的最大线程数 (200)”。然而,请求仍将排队等待服务。

2) 如果同时接收到更多请求,则将它们排队到配置的最大值(acceptCount 属性的值)。

因此总共可以接受 300 个请求而不会失败。 (假设您的 acceptCount 默认为 100)

3) 超过这个数字会抛出连接被拒绝的错误,直到有可用的资源来处理它们。

所以在你达到第 3 步之前你应该没问题

关于带有 mod_jk : maxThread setting upon load balancing 的 Apache + Tomcat,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3179135/

相关文章:

apache - Htaccess : URL Rewriting not causing 404 on nonexisting pages and not working as expected

php - 无法增加本地 WordPress 中的最大上传文件大小

php - 在 PHP 的窗口关闭事件上终止长时间运行的 MySQL 进程

java - pdfbox 请求后获取 ava.lang.ClassNotFoundException : org. apache.pdfbox.io.RandomAccessRead 控制台错误

mysql - 关于如何使用 mysql 和数据库池设置 tomcat 的好教程是什么?

javascript - HTML:自动生成日期和时间

android - 在Android上准确播放周期性声音

java - 无法在 linux 服务器上的 tomcat 6.0.24 中部署 war

Java:在多个线程上等待/通知

java - Reactor Project中的Operator "publishOn()"和thread affinity