Que tipo de “racionalização” ocorre quando você usa uma única máquina para gerar carga/estresse?

Que tipo de “racionalização” ocorre quando você usa uma única máquina para gerar carga/estresse?

O título desta pergunta representa minha principal preocupação, mas se você continuar lendo além doperguntaseção, você encontrará algumas informações básicas sobre nossa configuração. que podem ou não ser relevantes/úteis.

Pergunta

Estamos testando nosso aplicativo usandoGatling, e estão executando o cenário Gatling em umsolteiromáquina. Estamos descobrindo que nosso aplicativo é capaz de lidar com uma carga alta gerada pela ferramenta de estresse; no entanto, não é capaz de lidar com a carga relativamente baixa de usuários reais.

Minha pergunta é: que tipo de otimização ou simplificação no nível do sistema operacional/rede ocorre quando solicitações simultâneas são feitas de uma única máquina/sistema operacional para um aplicativo, versus solicitações simultâneas de várias máquinas (ou seja, usuários regulares usando seus navegadores da web)?


Fundo

Temos um aplicativo Tomcat atrás do Apache via AJP, que por sua vez está atrás de um Citrix Netscaler via porta 80 (também estamos planejando tirar o Apache da equação, mas isso é outro assunto..).

Nosso aplicativo foi paralisado sob carga relativamente baixa (conexões CLOSE_WAIT se acumulando entre o Apache e o Tomcat) e estamos no processo de teste de carga para resolver o problema. Deadlocks, ocorrendo em nossa instância SQLServer, apareciam com bastante frequência e então decidimos começar por aí. Para replicar o problema e posteriormente testar nossas soluções, estamos usando uma única máquina para gerar carga usando Gatling.

Quando começamos, conseguimos replicar os impasses de maneira confiável usando a ferramenta. Depois de fazermos algumas otimizações, os impasses desapareceram, assim como as conexões CLOSE_WAIT. Em seguida, carregamos o aplicativo para um carregamento que nos deixou muito satisfeitos e ele funcionou sem grandes problemas.

Infelizmente, quando as correções foram aplicadas ao sistema de produção, ainda víamos o mesmo comportamento original. O que me leva a pensar se a carga gerada pela ferramenta de estresse não é uma boa representação do que realmente está acontecendo no mundo real.devido ao fato de ser proveniente de uma única fonte, em vez de muitos clientes diferentes espalhados pela Internet.

Responder1

Um único gerador de carga provavelmente fará um trabalho melhor de pool de conexões do que clientes diferentes; melhor uso de Keepalives, por exemplo. Isso gera mais solicitações em menos conexões.

Se o DNS round-robin estiver envolvido, ele tenderá a atingir apenas um dos destinos DNS, em vez de distribuir a carga por todos eles. Alguns balanceadores de carga tomam decisões de aderência com base no IP do cliente, que seria estático neste caso.

Seu gerador de carga pode ter um pool de execução restrito (digamos, 200 'usuários') para que a latência na resposta faça com que os usuários diminuam a velocidade, ao contrário do mundo real, onde você tem um número muito maior de usuários que não esperam pacientemente por outros usuários para terminar.

Responder2

É difícil ficar sem ver o cenário de teste do Gatling. Apenas um "tiro às cegas": seu teste Gatling não representa com precisão o usuário real, ou seja,

  • Navegadores reais baixam recursos externos embutidos na página, ou seja, imagens, scripts e estilos, e fazem isso usando um conjunto de threads simultâneos. Se o seu teste Gatling estiver faltandoinferHtmlResourcesmétodos, pode ser que a carga vinda do Gatling seja muito menor do que a conduzida por usuários reais atrás dos navegadores reais
  • Cache DNS. Gatling pode atingir apenas um endereço IP devido aos endereços IP por trás do cache de nomes DNS no nível da JVM. ConformePerguntas frequentes sobre Gatling:

    Basicamente, o cache DNS do Gatling/JVM precisa ser ajustado. Uma solução é adicionar -Dsun.net.inetaddr.ttl=0à linha de comando.

  • Solicitações AJAX. Gatling não executa JavaScript do lado do cliente, portanto, se seu aplicativo for construído em solicitações XMLHTTP, elas não serão disparadas quando Gatling acessar a página. Você precisará lidar com eles manualmente caso seu aplicativo esteja usando alguma forma de AJAX

Então eu recomendaria referirComo fazer o JMeter se comportar mais como um navegador reale implementar uma configuração Gatling equivalente, como se o teste de carga não representasse a carga da vida real, não faz muito sentido executar tal teste.

informação relacionada