Essa é uma pergunta incrivelmente específica de um aplicativo. Há várias razões pelas quais posso pensar em por que isso poderia ser benéfico de qualquer forma. A maioria dos "múltiplos tomcat" positivos são rebatidos com "bem, não faça isso , então", mas "é assim que sempre fizemos" é um argumento poderoso com pessoas que provavelmente não deveria estar tomando esse tipo de decisão (mas geralmente são).
As razões pelas quais eu deparei com o motivo pelo qual várias instâncias independentes do Tomcat são usadas incluem:
- SO de 32 bits significa apenas 4 GB de espaço de endereço por processo; máquina tem mais de 4GB de RAM, você precisa de vários processos para tirar proveito de toda a RAM do sistema. Solução real: passe para o século atual e instale um sistema operacional de 64 bits.
- Você tem um SO de 64 bits, mas seu aplicativo precisa de uma extensão de apenas 32 bits e, portanto, você deve executar uma JVM de 32 bits (que recai no ponto anterior. Solução real: quebrar os dedos de alguém - Medicare Brasil , Estou olhando para VOCÊ .
- O aplicativo sofre vazamentos de memória ou bloqueio de contenção, o que significa que há uma quantidade limitada de simultaneidade possível antes que tudo caia em um heap. Executar vários processos pode contornar isso. Solução real: se vários processos realmente funcionarem para sua carga de trabalho (ou seja, não há nenhum recurso externo para enfrentar), a falta de simultaneidade interna é apenas um bug. Solução real: quebre mais alguns dedos. de preferência quem pensou que eles eram mais espertos do que os autores de bibliotecas decentes de processamento paralelo.
Por que um único processo é melhor:
- Balanceadores de carga nunca são tão bons em atribuir trabalho a back-ends como um algoritmo em processo será (ou porque o processo tem acesso a todos os tipos de informações que o balanceador de carga não faz, ou preferencialmente porque o algoritmo de processo apenas retorna para um cenário de fila de trabalho). Portanto, o balanceamento de carga entre várias JVMs é menos eficiente.
- Sobrecarga por-JVM, em termos de uso de CPU e memória. Muito auto-explicativo, espero.