Apache
Confira a documentação do Apache, ele entra em mais detalhes do que eu poderia aqui:
JVM
Defina o Xmx da JVM para não mais que 70% (aproximadamente) do total de RAM física livre. A razão para isso é que as bibliotecas perm gen e JVM ocupam espaço adicional também - o objetivo é que a memória total do processo nunca use memória virtual / swap. Se você definir isso muito alto, começará a ver problemas como "limite de sobrecarga de GC excedido".
O seu algoritmo GC pode ter um grande efeito no desempenho - certifique-se de estar usando alguma forma de coletor paralelo e não a serial 'pause, mark and sweep'. A JVM geralmente faz isso para você automaticamente no modo -server
.
Use uma ferramenta como JConsole ou JVisual VM para inspecionar o GC e a quantidade de heap que você está realmente usando e ajustar para baixo - um heap muito grande pode afetar os tempos de coleta de lixo.
Tomcat
Quanto aos encadeamentos de conectores HTTP, em uma única instância do Tomcat, dependendo do seu aplicativo, normalmente você pode aumentar a contagem de encadeamentos para cerca de 600 antes de encontrar problemas - no entanto, não há necessidade de ser tão alto assim ' Vou apenas colocar mais pressão na CPU e na memória.
Quando estiver satisfeito com os tópicos máximos, defino os minSpareThreads
e maxSpareThreads
em relação a isso. Aumentando os valores se eu souber que vou ser atingido por picos em novas conexões, etc.
Próximo passo acceptCount
. Este é o máximo de conexões enfileiradas -c onnections que transbordam essa configuração após o uso dos encadeamentos do conector receberão uma "conexão recusada".
Como um tweek menor, você pode definir enableLookups
(permitir pesquisas de nome de host DNS) para false. Quando ativado, (ligeiramente) afeta negativamente o desempenho.
Além disso, confira a Biblioteca nativa do Tomcat, isso usa código nativo para melhorar o desempenho em certas operações (como IO de arquivos, etc.).
Teste de carga
Para testes básicos de carga / desempenho, confira o Apache JMeter:
Nós o usamos para testar o desempenho básico do carregamento da página, com scripts de teste do JMeter usando centenas de solicitações simultâneas. Você precisa de um servidor razoavelmente robusto para executá-lo (não na mesma máquina em que você está executando o Apache HTTPD e o Tomcat).