为什么我们在同一台服务器上使用多个应用程序服务器实例

2022-09-03 05:34:23

我想有一个很好的理由,但我不明白为什么有时我们把例如5个具有相同Web应用程序的实例放在同一个物理服务器上。

它是否与多处理器架构的优化有关?JVM或其他东西允许的最大RAM限制?


答案 1

嗯......很长一段时间后,我再次看到这个问题:)

好吧,在一台机器上使用多个JVM实例可以解决很多问题。首先让我们面对这个:尽管JDK 1.7即将问世,但许多遗留应用程序都是使用JDK 1.3或1.4或1.5开发的。JDK的很大一部分仍然被他们瓜分。

现在回答您的问题:

从历史上看,系统架构师通过在单个机箱上部署多个JVM来解决三个主要问题:

  1. Garbage collection inefficiencies:随着堆大小的增长,垃圾回收周期(特别是对于主要收集)往往会在处理中引入显著的延迟,这要归功于单线程 GC。多个JVM通过允许较小的堆大小并在GC周期期间启用某种程度的并发性来解决这个问题(例如,对于四个节点,当一个节点进入GC时,您仍然有三个其他主动处理)。

  2. Resource utilization:较旧的JVM无法有效地扩展到四个左右的CPU。答案是什么?为包装盒中的每 2 个 CPU 运行一个单独的 JVM(当然,里程可能因应用而异)。

  3. 64-bit issues:较旧的 JVM 无法分配超过 32 位最大值的堆大小。同样,多个 JVM 允许您最大限度地提高资源利用率。

  4. Availability:人们有时在单个机箱上运行多个 JVM 的另一个原因是可用性。虽然这种做法确实不能解决硬件故障,但它确实解决了应用程序服务器的单个实例中的故障。

摘自( http://www.theserverside.com/discussions/thread.tss?thread_id=20044 )

我主要看过weblogic。以下是进一步阅读的链接:

http://download.oracle.com/docs/cd/E13222_01/wls/docs92/perform/WLSTuning.html#wp1104298

希望这会帮助你。


答案 2

我猜你指的是应用程序群集。

AFAIK,JVM的生成具有非常大的堆大小,在垃圾回收方面存在问题,尽管我确信通过玩GC算法和参数,您可以将损害降至最低。此外,群集应用程序没有单点故障。如果一个节点出现故障,其余节点可以继续为客户端提供服务。这就是“基于消息的体系结构”非常适合可伸缩性的原因之一。每个请求都映射到一条消息,然后集群中的任何节点都可以选取该消息。

另一点是同时为多个请求提供服务,以防您的应用程序不幸明智地使用同步关键字。我们目前有一个遗留应用程序,它有很多共享状态(不幸的是),因此并发请求处理是通过生成大约20个JVM进程来完成的,该进程具有中央调度单元,该单元执行所有调度工作。;-)


推荐