Tomcat apresentando desempenho péssimo sem motivo aparente

Tomcat apresentando desempenho péssimo sem motivo aparente

Estamos executando um aplicativo de jogo .WAR no Tomcat 6 em um servidor Amazon EC2, processador de 8 núcleos e 7 GB de RAM. O aplicativo usa um banco de dados MySQL hospedado no Amazon RDS.

Este aplicativo do Facebook leva muito tempo para ser acessado quando apenas 20 a 30 usuários o estão jogando. Grande diferença de 1-2 usuários. O .WAR inteiro tem aproximadamente 4 MB, todo o conteúdo estático hospedado em outro lugar.

O servidor nunca esteve perto de ficar sem RAM. A utilização da CPU nunca foi superior a 13,5-14%. Mesmo com cerca de 500 usuários, isso paralisou completamente tudo. A contagem de threads ou threadpools não está perto de atingir o limite máximo. Aumentei maxthreads, mas não fez uma diferença perceptível.

Minha teoria é que o Tomcat só pode usar um núcleo de processador, o que explicaria por que ele foi interrompido mesmo que o uso da CPU estivesse estável em 13-14% no pico de atividade.
Mas estou lutando para entender por que ele usaria apenas um núcleo de CPU. Não há limite de processador em server.xml. O aplicativo contém vários servlets (4 ou 5). Não há menção de SingleThreadModel no código Java.

O QUE poderia estar fazendo com que o aplicativo fosse executado de forma extremamente lenta? Se houver apenas 1 a 5 pessoas no aplicativo, ele funcionará bem. Com 20 a 30 pessoas, é pouco contactável.

Responder1

Isso pode ser uma falha no design do aplicativo. Também temos um aplicativo que exerce o mesmo comportamento. Uma parte significativa de seu código é sincronizada, portanto, não importa quantas CPUs atribuímos a ele - ele é executado efetivamente em um único thread. Você não pode fazer praticamente nada nessa situação além de executar várias instâncias do mesmo aplicativo e equilibrar a carga entre elas.

informação relacionada