在Apache服务器后面有多个Tomcat实例有什么好处?

我们有5个物理服务器,它们都有一个硬件负载均衡器,每个都有一个使用mod_jk连接到三个(每个服务器)Tomcat实例的Apache服务器,所有这些服务器都部署了完全相同的Web应用程序。 我已经提出了放弃其中一个Tomcat(每个服务器)并增加内存分配给其余两个的论点。 我想知道是否有两个是必要的,或者我们应该每个物理服务器只有一个Apache-Tomcat对。 我无法得到一个很好的理由,为什么要这样做,但是当我join开发团队的时候是这样的。

我想我也可以问,有没有明显的缺点? 我想到的是,正如我所注意到的,整体上可用的内存会less一些(取决于你有多less个Web应用程序,你就饿死了),还有更多的集中连接由每个实例。

这是一个令人难以置信的特定于应用程序的问题。 我可以想到,为什么这样做可能是有好处的。 大多数的“多tomcat”的积极反驳“好吧,那么不要那么做”,但“这是我们一直这样做”的方式是一个强有力的论点与那些可能不应该这样做的人的决定(但通常是)。

遇到过使用多个独立的Tomcat实例的原因包括:

  • 32位操作系统意味着每个进程只有4GB地址空间; 机器拥有超过4GB的RAM,您需要多个进程来利用所有的系统RAM。 真正的解决scheme:进入本世纪,并安装64位操作系统。
  • 你有一个64位的操作系统,但是你的应用程序只需要一个32位的扩展名,因此你必须运行一个32位的JVM(这就是前面提到的点。真正的解决scheme:打破别人的手指 – 看着
  • 应用程序遭受内存泄漏或locking争用,这意味着在所有事情陷入堆之前,可能存在有限数量的并发。 运行多个进程可以解决这个问题。 真正的解决scheme:如果多个进程确实为您的工作负载工作(也就是说,没有外部资源进行竞争),那么缺乏内部并发只是一个错误。 真正的解决scheme:打破更多的手指。 最好谁认为他们比体面的并行处理库的作者更聪明。

单一程序更好的原因包括:

  • 负载均衡器从来没有像在进程中的algorithm那样将后台分配工作(或者是因为进程中可以访问负载均衡器没有的各种信息,或者最好是因为进程内algorithm只是转到工作队列scheme)。 因此,多个JVM之间的负载平衡效率较低。
  • 每个JVM开销,无论是CPU和内存使用情况。 相当不言自明,我希望。