Sobrecarga de vários contêineres de servlet Java

2

Estou configurando um servidor de desenvolvimento para uma equipe com a qual estou trabalhando. Eles desenvolvem aplicativos JavaEE, que são implementados e executados como arquivos WAR. Eles inevitavelmente precisam executar uma ou duas instâncias de sua aplicação constantemente neste servidor.

Existem vários outros aplicativos Java que também precisam ser executados no servidor, incluindo Jenkins, Artifactory e algumas outras ferramentas internas implementadas como WARs.

O Jenkins e o Artifactory, por padrão, são executados em seu próprio contêiner de servlet e configurá-los dessa maneira é muito simples. Ocorre-me, no entanto, que pode haver alguma economia de memória e desempenho obtida ao executar todos os WARs em uma instância de, e. Tomcat em vez de ter o Winstone rodando para o Jenkins, o Jetty para o Artifactory e o Tomcat para ferramentas internas.

É provável que vejamos benefícios significativos ao usar um único contêiner servlet?

    
por Armand 14.11.2012 / 07:22

1 resposta

2

Há alguma vantagem de uso de memória para executar vários 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 da JVM, como o Jenkins, podem consumir muita memória, o que pode direcionar sua solução.

Como um guia de dimensionamento aproximado, eu faria o seguinte:

  • Reserve 500 MB para o SO
  • Aloque de 1 a 2 GB por JVM
  • Use essas figuras para determinar quantas JVMs você pode executar em uma caixa. Não é uma boa ideia confiar em swap para JVMs ativas.
  • Configure o heap inicial (-Xms) e o heap máximo (-Xmx) para o mesmo valor
por 14.11.2012 / 08:52