Executando verificação de segurança...
3

Quedas no Servidor

Olá pessoal! Tudo bem?

Preciso de ajuda, tenho um servidor com 64 GB, +200 Disk, 8 CPUs, mas ele trava quando uma média de 180 usuários acessam essa aplicação (Webview) simultaneamente, já aumentei o número de threads do php e não há soluções

Alguém teve um problema similar? Ou possui uma aplicação como esta? Qual é a configuração ideal de servidor?

Carregando publicação patrocinada...
4

Olá,

Uma solução comum para isso é utilizar um servidor intermediário (reverse proxy) como o nginx para atuar como um "porteiro" ou "bouncer". Isso ajuda a controlar e limitar o número de solicitações que são enviadas para a sua aplicação php, evitando que ela seja sobrecarregada.

O conceito por trás disso é conhecido como "limiting" ou "throttling". O objetivo é limitar o número de requisições que chegam a sua aplicação backend em um determinado período, de forma a garantir que ela possa processá-las de maneira eficiente. A solução é justamente o oposto do que "aumentar o número de threads do php", mas sim diminiuir o trabalho delas.

Como você tem 8 CPUs, uma configuração do nginx comum seria ter 4 a 8 "workers" para cada CPU. Assim, o nginx lidará com as requisições e só enviará para o PHP aquelas que ele pode realmente processar. Se houver mais requisições do que isso, o NGINX as limitará antes de encaminhar para o seu código PHP, que é muito mais "lento" na execução do que o nginx.

Depois de definir esse número inicial, é essencial monitorar o servidor em condições reais de carga. O número de workers que você deve configurar depende de vários fatores, como o Webview lida com requisões concorrentes? Sua aplicação é I/O ou CPU bound?

Além disso é crucial entender onde exatamente sua aplicação está falhando ou sendo sobrecarregada. Para isso, a técnica de "profiling" pode ser útil. Embora não esteja familiarizado com PHP, certamente existem ferramentas disponíveis que podem ajudá-lo a entender melhor os gargalos de desempenho. Com essas informações, você pode otimizar seu código conforme necessário.

Espero que estas orientações lhe ajudem!

1

Primeiro você precisa esclarecer o que é "queda no servidor". Para tal, você precisa causar (simulando) esta queda e ver exatamente quais logs de erro o servidor está gerando nesse momento.

O problema pode ser desde um problema de configuração de algum serviço, como um problema de hardware por exemplo.

Então as cegas assim, ninguém vai saber lhe ajudar.

1

Quando me refiro a quedas, seria uma lentidão muito grande no site, onde a CPU chega à atingir 100% de utilização, e a máquina para de funcionar; não encontramos nada de logs de erro, a unica coisa que sabemos é esse alto consumo de processamento, e isso ocorre em determinados horarios de pico, por exemplo das 10 horas da manhã até umas 11:45, durante a tarde próximo as 18h e as vezes 20h; imaginamos que pode ser a quantidade de acessos simultâneos, mas 8 CPUs não seria o suficiente?

1

quando o servidor está em 100%, quais são os processos que estão causando essa sobrecarga? vc consegue correlacionar com algum processo? o que acontece entre as 10h e as 11h45?

sua explicação está muito genérica, ninguem vai conseguir te ajudar de forma assertiva

1

Você precisa de dados para entender a situação.

Será que é o excesso de usuários ou uma requisição específica que está consumindo muito recurso (memoria) e seu servidor acaba passando a usar o swap?

Faça o log de todas as requisições, jogue numa planilha e veja quais requisições tomam mais tempo, aí você vai debugar em cima delas se há algo errado.

1

Tive um problema parecido com minha máquina travava durante a noite mesmo sem acesso fora do normal. Todos os dias amanhecia travada. Era uma máquina simples, de teste, mas acontecia isso. Neste caso, o problema era disco cheio. Muita cache das atualizações armazenada estava lotando o disco.

No momento minha aplicação funciona no google cloud run configurada para escalar a até 100 máquinas. Nunca mais tive nenhum problema

1

Para tentar lhe dar alguma ideia, precisa ser mais específico no que roda nesse servidor.

Mas ja adianto que uma máquina dessas deveria aguentar muito mais do que 180 usuários.

Tente ser mais detalhado nas especificações do problema

1

1° Nessa aplicação tem espaço pra cache?
2° Seria bom tentar identificar exatamente o gargalo em um ambiente de desenvolvimento com as mesmas configurações do ambiente produtivo, fazendo testes de carga.
3° Essa aplicação faz um processamento pesado que envolve uso de CPU? Se sim, pode ser uma boa jogar isso para um serviço separado (que você consiga escalar horizontalmente nos horários de pico).
4° Você roda algum banco de dados nesse mesmo servidor? Se estiver rodando, habilite o slow queries, e dê uma olhada no processlist pra ver se não existe alguma query pesada drenando o CPU da máquina (que possa ser otimizada com o uso de índices).

1

o que essa aplicação faz? que linguagem está desenvolvida? o que mais tem nesse servidor? que tipo de instrumentação está usando para observar consumo de memória e processamento?

tem algo MUITO errado ai pra um servidor desse tamanho não conseguir dar conta de míseros 180 usuários

1
  1. Você tem métricas dessa aplicação a nível de servidor?
    1.1 Você sabe verificar quais queries estão demorando muito?
    1.2 Você consegue analisar os processos pra verificar se algum deles está "gargalando"? Tomando tempo demais para operações rápidas
  2. Eu começaria analisando a aplicação em si, você tem um baita de um servidor, eu já rodei coisa muito maior (numero de usuários) com máquinas bem menores.