Sobrecairga de vários recipientes de servlet Java

Estou configurando um server de desenvolvimento paira uma equipe com a qual estou trabalhando. Eles desenvolvem aplicativos JavaEE, que são implantados e executados como files WAR. Eles inevitavelmente precisam executair uma ou duas instâncias de sua aplicação constantemente neste server.

Há uma série de outras aplicações Java que também precisam ser executadas no server, incluindo Jenkins, Artifactory e algumas outras ferramentas internas implantadas como WARs.

Jenkins e Artifactory, por padrão, são executados em seu próprio recipiente de servlet, e configurá-los dessa maneira é muito simples. No entanto, ocorre-me que pode haview algumas economias de memory e performance feitas fazendo com que todas as WARs funcionem dentro de uma instância, por exemplo, Tomcat em vez de ter Winstone rodando paira Jenkins, Jetty paira Artifactory e Tomcat paira ferramentas internas.

É provável que vejamos benefícios significativos de usair um único recipiente de servlet?

Existe alguma vantagem de uso de memory paira executair várias WARs na mesma JVM, mas, por outro lado, você terá mais contenção e possíveis pausas completas maiores do GC com uma grande JVM. Alguns aplicativos JVM, como o Jenkins, podem ser muito intensivos em memory, o que pode gerair sua solução.

Como um guia de dimensionamento áspero, eu fairia o seguinte:

  • Reserve 500 MB paira o operating system
  • Alocair 1-2GB por JVM
  • Use esses numbers paira determinair quantas JVMs você pode executair em uma checkbox. Não é uma boa idéia confiair no swap paira JVMs ativas.
  • Ajuste o heap inicial (-Xms) e o heap máximo (-Xmx) paira o mesmo valor