Os servidores travam com 3000 clientes simultâneos - como configurar corretamente? PHP e Apache

2

Tenho 4 servidores da web, 2 servidores de banco de dados (read & write), Redis e um balanceador de carga. Estou usando o PHP 7.0 & Apache2 & MySQL 5.7, no entanto, quando eu carrego testes com 3000 usuários que navegam ao mesmo tempo, os servidores quebram um por um.

Os servidores Apache são strongs, cada um tem 32GB de RAM e, infelizmente, todos eles atingem o uso máximo de RAM.

Fizemos muitas alterações no código, no entanto, isso não parece certo para mim, meus provedores de hospedagem não podem me ajudar a configurar melhor meu servidor, já que dizem que isso é o melhor que podem fazer, e aqui Eu preciso da sua ajuda - o que estamos perdendo? quais configurações no PHP / Apache / MySQL devem ser definidas?

Gostaria de esclarecer que o site funciona bem para digamos 300 clientes, mas à medida que mais e mais clientes visitam, o tempo de resposta chega a 50 segundos por solicitação, o que é muito estranho, como apenas 400 clientes fazem meu servidor responder tão lentamente ?

Estou realmente desesperado e confuso, o que devemos olhar?

Muito obrigado.

    
por MyLibary 20.06.2018 / 17:32

1 resposta

2

We had even 6000 last summer. How do 4 servers with load balancer not handle such requests?

Então, o que mudou? Para responder à pergunta, quase sempre sendo atolado no processamento de código de backend, e às vezes por coisas como o esgotamento do socket tcp, e outras vezes é apenas um simples pool / etc limita entre apache e php.

Siga este processo:

  1. Elimine o PHP da pilha. Servir apenas pequenos arquivos estáticos para o seu teste
  2. Observe os resultados e ajuste o apache / OS para acomodar as conexões desejadas
  3. Reintroduza o PHP. O servidor não conseguirá corresponder ao desempenho de exibição do arquivo estático
  4. Faça o perfil do seu código PHP, identifique lentidão e resolva-os
  5. Finalmente: armazene em cache os resultados do PHP que você puder.

"Como obtenho uma aplicação php nondescript para atender ao benchmark x ?" é uma questão muito ampla, mas o processo é geralmente, obter sua veiculação estática de front-end para superar seus requisitos e adicionar seu código de back-end ao mix. Ou lentidão ix no código de back-end ou eliminá-lo.

Uma vez que você começa a bater em milhares de usuários simultâneos . Você vai lidar com certos limites (velocidade do sistema de arquivos, memória, velocidade da CPU, latência de comunicação, código wordpress ineficiente e chamadas de banco de dados lentas bem como uma tonelada de contexto que liga a cpu) que irão se compor e rapidamente resultar em degradação exponencial do serviço.

    
por 21.06.2018 / 15:11