2

Tomcat 可以告诉 mod_jk 的负载均衡器在过载时使用另一个工作器吗?如果是这样,怎么做?

我将 Kodo JDO 用于多租户应用程序的持久层,内存使用的一个重要因素是每个数据库加载的模式信息。每个使用我的应用程序的组织都有自己的数据库。该应用程序不支持集群或会话序列化。对其进行改造以支持这些超出了该项目的范围。

Tomcat 的每个实例被限制为 4GB 的堆,以防止垃圾收集器阻塞。没有一个 Tomcat 实例有足够的内存来加载所有组织所需的所有数据库的模式。

Tomcat 的负载均衡通常由会话完成。按会话进行平衡可能会导致一个实例加载的模式超出其内存可以容纳的数量,并且它将以缓慢而痛苦的方式死亡,最终以 GC 开销限制结束。

我当前的解决方法是使用多个具有不同主机名的显式独立实例。每个组织都可以访问这些主机名之一。

一种选择是让“完整的”Tomcat 发出信号,表明它不能为用户服务。

Tomcat 可以告诉 mod_jk 的负载均衡器在过载时使用另一个工作器吗?如果是这样,怎么做?

4

1 回答 1

1

有趣的问题(+1)。如果您找到答案,请传递:)

我知道这样做的唯一方法是通过负载均衡器。

使用负载均衡器的另一个很酷的功能是您可以设置 http 健康检查,因此如果您的任何实例停止响应,它将转移到下一个健康的服务器。

于 2012-03-09T02:26:02.183 回答