O aplicativo fica lento (ÀS VEZES) em horários de pico, rodando no Tomcat com um proxy reverso do servidor Apache, implantado na AWS

O aplicativo fica lento (ÀS VEZES) em horários de pico, rodando no Tomcat com um proxy reverso do servidor Apache, implantado na AWS

Apenas para prefácio: sou desenvolvedor de software e a princípio ninguém sabia o que estava acontecendo, então fiz alguns testes e leituras e gostaria de ajudar meus colegas a resolver esse problema.

O problema:

O problema é que em horários de pico, o servidor fica tão lento que a conexão atinge o tempo limite em navegadores como o Chrome (após 30 segundos), mas o servidor ainda está ativo e pode servir páginas após aproximadamente 100 segundos (testado com insônia). Eu repliquei o problema abs ...no servidor de produção e tem algo a ver com o número de solicitações simultâneas, provavelmente causadas pela nossa configuração do servidor Apache.

Mais informações:

Ao desenvolver, executamos o Tomcat8 localmente e testei-o com " abs -c 200 -n 2000 https:/[link]" e os tempos de execução são bons. Mas testando o servidor de produção, mesmo com 50 solicitações simultâneas, a lentidão na API que eu estava testando foi significativa: do tempo padrão de 800 ms para 27.846 ms.

Coisas tentadas e mais detalhes:

Temos o Java Melody em execução e pensei que talvez estivéssemos atingindo o limite de threads no thread de execução do Tomcat, então aumentamos o número de threads para 500 do padrão de 200 (isso foi antes de eu fazer o teste). Ao executar o teste mencionado acima, posso ver os threads ocupados subirem para 50 e poucos em 500 (executando em produção, então algumas pessoas também estão usando o programa), mas não, ele ainda fica muito lento.

Nos horários de pico, vejo que temos cerca de 1.000 sessões http, mas os threads, a memória e a CPU não chegam nem perto de 100%. Só para ter certeza, atualizamos o servidor para o melhor que podemos, mas é claro que não foi isso. Estamos usando SQL, mas o servidor SQL também não está atingindo o pico, então duvido que seja esse o problema.

Eu sei que não deveria imitar os argumentos da JVM, mas olhando para problemas semelhantes, tentei adicionar "-XX:ReservedCodeCacheSize=512M", mas também não funcionou. Também tentei aumentar aceitaCount para 1000 em server.xml, mas ainda não está funcionando.Devo reverter essas alterações?Não notei nenhuma mudança de desempenho e, pelo que pude perceber pela leitura da documentação, não há problema em deixar assim.

Temos um recurso estranho em que o webapp vai para a página inicial após algum tempo de inatividade e continua atualizando a página inicial a cada xx minutos. Acho que isso é ruim para o desempenho, especialmente se um usuário tiver muitas guias abertas e elas começarem a atualizar, provavelmente não é o que está causando nossos problemas, mas vale a pena mencionar.

A próxima coisa que tentarei hoje é mexer nos argumentos do servidor Apache. Estou lendo umguia de ajustee MaxRequestWorkers/MaxClients parece algo que pode explicar o que estamos enfrentando. CitarSe esta diretiva for muito baixa, o Apache subutiliza o hardware disponível, o que se traduz em desperdício de dinheiro e longos atrasos nos tempos de carregamento da página durante os horários de pico.

Eu apreciaria qualquer dica. Espero que seja apenas o servidor Apache e eu possa pelo menos tornar o servidor utilizável hoje. Alguma outra configuração que possa causar essa lentidão?

Responder1

Seu servidor web pode estar engasgado com muitas solicitações, o que na verdade emula o ataque SlowLoris DOS, por favor verifique meuresposta anteriorsobre o tema.

informação relacionada