Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

pedradegelo

Apache está engasgando com 2500+ usuarios simultâneos

Recommended Posts

Bom... O cliente recebe a requisição, processa, libera e fica pronto para receber uma nova requisição.

 

Considerei 23MB de média para cada processo Apache em prefork com mod_php.

7000MB / 23MB = ~304 clientes (arredondei para 300)

Você ainda deve deixar um pouco de memória livre para gestão do SO e de outras coisas do sistema caso exista (MySQL, etc). O correto para este cálculo seria desligar (parar o serviço) o Apache, ver quanto há de memória livre (# free -m) e usar este número como referência.

 

300 clientes para consumir toda a sua memória (7GB).

E como eu sei que 300 clientes serão suficientes? Não sei.

Em teoria, deveria ser suficiente.

 

Para saber o uso de memória do processo Apache:

# ps aux | grep apache

Pode ser que o processo do Apache seja nomeado httpd, neste caso:

# ps aux | grep httpd

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bom... O cliente recebe a requisição, processa, libera e fica pronto para receber uma nova requisição.

 

Considerei 23MB de média para cada processo Apache em prefork com mod_php.

7000MB / 23MB = ~304 clientes (arredondei para 300)

Você ainda deve deixar um pouco de memória livre para gestão do SO e de outras coisas do sistema caso exista (MySQL, etc). O correto para este cálculo seria desligar (parar o serviço) o Apache, ver quanto há de memória livre (# free -m) e usar este número como referência.

 

300 clientes para consumir toda a sua memória (7GB).

E como eu sei que 300 clientes serão suficientes? Não sei.

Em teoria, deveria ser suficiente.

 

Para saber o uso de memória do processo Apache:

# ps aux | grep apache

Pode ser que o processo do Apache seja nomeado httpd, neste caso:

# ps aux | grep httpd

 

 

Tá. Só tem um problema: eu tinha 1 ticket grátis de suporte sob demanda, aí usei pra ativar o worker.

Sabe como mudar de novo para o prefork?? Se usar um ticket agora, é 10 dolares kkk

Compartilhar este post


Link para o post
Compartilhar em outros sites

Li algumas partes do documento que você passou. Uma grande, e principal, diferença do ambiente dele para o seu é que ele não usa PHP. O cenário dele diz respeito a aumentar a performance para um servidor FTP, ou seja, apenas conteúdo estático. Você dá refresh na página de 60 em 60 segundos, por este motivo o conteúdo não pode ser "cacheado".

 

Quanto a troca de MPM:

 

Bom... se estiver sendo utilizado o pacote original dos repositórios do Debian, basta seguir como descrito a seguir:

 

Verifique se o apache2.conf já estiver configurado para trabalhar com preform e worker, basta fazer:

# apt-get install apache2-mpm-prefork

Para retornar ao worker:

# apt-get install apache2-mpm-worker

 

Apenas 1 dos 2 módulos pode estar instalado e por este motivo ao executar o procedimento de instalação do mpm-prefork o processo vai desinstalar o mpm-worker.

 

Um detalhe que estava observando, o parâmetro ServerLimit não é necessário para o preform, basta o MaxClients, neste caso o ServerLimit assume o mesmo valor de MaxClients.

 

Não se esqueça de observar o arquivo apache2.conf (/etc/apache2/apache2.conf). Abaixo segue original deste arquivo para a configuração dos módulos MPM, altere a parte referente a prefork para atender ao requisito:

 

##

## Server-Pool Size Regulation (MPM specific)

##

 

# prefork MPM

# StartServers: number of server processes to start

# MinSpareServers: minimum number of server processes which are kept spare

# MaxSpareServers: maximum number of server processes which are kept spare

# MaxClients: maximum number of server processes allowed to start

# MaxRequestsPerChild: maximum number of requests a server process serves

<IfModule mpm_prefork_module>

StartServers 5

MinSpareServers 5

MaxSpareServers 10

MaxClients 150

MaxRequestsPerChild 0

</IfModule>

 

# worker MPM

# StartServers: initial number of server processes to start

# MaxClients: maximum number of simultaneous client connections

# MinSpareThreads: minimum number of worker threads which are kept spare

# MaxSpareThreads: maximum number of worker threads which are kept spare

# ThreadLimit: ThreadsPerChild can be changed to this maximum value during a

# graceful restart. ThreadLimit can only be changed by stopping

# and starting Apache.

# ThreadsPerChild: constant number of worker threads in each server process

# MaxRequestsPerChild: maximum number of requests a server process serves

<IfModule mpm_worker_module>

StartServers 2

MinSpareThreads 25

MaxSpareThreads 75

ThreadLimit 64

ThreadsPerChild 25

MaxClients 150

MaxRequestsPerChild 0

</IfModule>

 

# event MPM

# StartServers: initial number of server processes to start

# MaxClients: maximum number of simultaneous client connections

# MinSpareThreads: minimum number of worker threads which are kept spare

# MaxSpareThreads: maximum number of worker threads which are kept spare

# ThreadsPerChild: constant number of worker threads in each server process

# MaxRequestsPerChild: maximum number of requests a server process serves

<IfModule mpm_event_module>

StartServers 2

MaxClients 150

MinSpareThreads 25

MaxSpareThreads 75

ThreadLimit 64

ThreadsPerChild 25

MaxRequestsPerChild 0

</IfModule>

 

Se não tiver sendo utilizado um pacote oficial do repositório, ou seja, um pacote compilado.

"Houston, we have a problem."

Vai ter que abrir o ticket. :(/>

Compartilhar este post


Link para o post
Compartilhar em outros sites

Li algumas partes do documento que você passou. Uma grande, e principal...

 

Cara... acho q descobri o q está acontecendo.

O cara do suporte disse que a velocidade da internet é de 20mb/s (ou 156mbps)

Estava fazendo as contas, digamos que 2500 pessoas concorrentes tentem acessar o json (24kb), já da uma carga de 60mb.

Então como temos 20% do cpu em uso, 17% da memória em uso, tudo leva a crer que esses engasgos são por conta da broadband, certo?

 

Se está certo, alguma saída palpável?

Compartilhar este post


Link para o post
Compartilhar em outros sites

não gerados por terceiros.

 

não sei como ajudar mais

precisava ter acesso a dados estatisticos reais do servidos, nao dados gerados por terceiros

 

sabado e domingo é a ultima chance pra esse ano, ultima rodada do brasileirão.

gostaria de acompanhar em tempo real na vm?

Compartilhar este post


Link para o post
Compartilhar em outros sites

não sei como esta meu tempo no final de semana, mas claro que se houver oportunidade gostaria sim de acompanhar.

 

o VPS não te dá um painel de estatísticas?

 

não me parece uma boa ideia mecher no que você tem hoje, mas ajustar o worker para atender melhor o que você tem hoje.

você pode ver quanto cada processo do apache esta usando de memória?

# ps aux | grep apache

 

Eu não consigo simular isto num ambiente de testes aqui, ou eu instalo mpm-prefork com PHP ou instala mpm-worker sem PHP.

 

O que eu consigo aqui é instalar o mpm-event (que é um módulo MPM com caracteristicas de prefork e worker).

Verifique com o comando a seguir qual o módulo MPM rodando no seu Apache:

# apachectl -l

 

Pode ser que o seu Apache seja realmente compilado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

não sei como esta meu tempo no final de semana, mas claro que se houver oportunidade gostaria sim de acompanhar.

 

o VPS não te dá um painel de estatísticas?

 

não me parece uma boa ideia mecher no que você tem hoje, mas ajustar o worker para atender melhor o que você tem hoje.

você pode ver quanto cada processo do apache esta usando de memória?

# ps aux | grep apache

 

Eu não consigo simular isto num ambiente de testes aqui, ou eu instalo mpm-prefork com PHP ou instala mpm-worker sem PHP.

 

O que eu consigo aqui é instalar o mpm-event (que é um módulo MPM com caracteristicas de prefork e worker).

Verifique com o comando a seguir qual o módulo MPM rodando no seu Apache:

# apachectl -l

 

Pode ser que o seu Apache seja realmente compilado.

 

 

Dá uma olhada aí, sou leigo na parte do ps aux, mas o modulo é o worker ^^

http://i46.tinypic.com/2j31jiu.jpg

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, não tem nenhuma programação PHP no seu site?

O mod_php não esta instalado, a não ser que esteja rodando via mod_cgi.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, não tem nenhuma programação PHP no seu site?

O mod_php não esta instalado, a não ser que esteja rodando via mod_cgi.

 

Eu ouvi uma bulha de que o worker trabalha junto com esse tal mod_cgi.

Deve ser por isso que não há php.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, sugiro que você instale uma ferramenta de APM em seu servidor.

É bem prático e muitas vezes mais fácil do que procurar gargalos na mão.

 

O New Relic (http://newrelic.com) é ótimo para isto (criando uma conta lá você tem 15 dias do PRO grátis e ganha uma camisa :P).

 

Depois você pode utilizar alguma ferramenta como o Blitz (http://www.blitz.io/) para fazer um teste de carga e ver os gargalos no New Relic.

O próprio Blitz já possui alguns relatórios mas o New Relic é bem mais detalhado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Cara, sugiro que você instale uma ferramenta de APM em seu servidor.

É bem prático e muitas vezes mais fácil do que procurar gargalos na mão.

 

O New Relic (http://newrelic.com) é ótimo para isto (criando uma conta lá você tem 15 dias do PRO grátis e ganha uma camisa :P/>).

 

Depois você pode utilizar alguma ferramenta como o Blitz (http://www.blitz.io/) para fazer um teste de carga e ver os gargalos no New Relic.

O próprio Blitz já possui alguns relatórios mas o New Relic é bem mais detalhado.

 

valeu a dica bruno. instalei mas não funciona.

é listado no phpinfo(), mas não inicia.

la no site desse newrelic q talvez não funcione no apache worker.

como o meu é worker, deve ser isso.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opa,

 

Não sou muito familiar com o PHP e muito menos com Apache :(

Mas sou usuário do New Relic e sei como estas ferramentas ajudam nestes casos. As vezes você encontra outra ferramenta que rode com Apache Worker. Se você conseguisse uma instalação mesmo que não funcional (a parte de aplicação), se conseguisse instalar o server monitoring já da para medir o consumo de sua banda.

 

Mas após sua resposta eu vi lá falando que provavelmente não funciona no Apache Worker. O que seria o Apache Worker?

Será que o problema não é com isto? Neste link: https://newrelic.com/docs/php/php-and-the-apache-worker-mpm eles dizem algumas coisas como:

 

"using PHP with a threaded Apache is dangerous, and highly discouraged.".

 

"Our own internal experience backs this up. While threaded MPMs appear to work when casually inspected, they falls apart under load and regularly get segmentation violations. It does this without the New Relic agent installed, just serving up simple Drupal and Wordpress test pages."

 

E dizem alguma coisa sobre utilizar FastCGI e que nas versões mais novas melhora isto. Como não entendo nada de Apache vou apenas recomendar a leitura (se você já não tiver lido isto).

 

O suporte do NewRelic também é fantástico, e pelo que eles dizem lá se quiser rodar com Apache Worker o suporte pode ajudar.

 

No início do seu tópico você também disse que saiu do prefork pro worker.. O que motivou isto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Bruno,

a razão do meu vps para cpu/memória seria de 20ghz/7gb

como são 5 cpus e o apache prefork, que é que vem na instalação padrão,

não é multithreading, eu tive que optar pelo worker, que é multhreading

e distribui a carga entre os cpu's.

 

Lá realmente fala sobre o worker, que não é recomendável, mas ai é questão

de ter muita memória, pra pouco cpu, justamente o inverso do meu caso.

 

abraços.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu sistema para de responder com aproximadamente 1500 acessos "concorrentes".

 

Nop, foi uma indisponibilidade temporária, continua funcionando e subindo.

 

2540... continua subindo.

 

A média parecem ser 2000 acessos. Provavelmente os usuários percebem a instabilidade, saem e depois o sistema volta a funcionar.

 

Cara... eu até peguei alguma indisponibilidade no site, mas não peguei nenhuma indisponibilidade do AJAX PHP.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Seu sistema para de responder com aproximadamente 1500 acessos "concorrentes".

 

Nop, foi uma indisponibilidade temporária, continua funcionando e subindo.

 

2540... continua subindo.

 

A média parecem ser 2000 acessos. Provavelmente os usuários percebem a instabilidade, saem e depois o sistema volta a funcionar.

 

Cara... eu até peguei alguma indisponibilidade no site, mas não peguei nenhuma indisponibilidade do AJAX PHP.

 

Prog,

Se viu cara...kkk fail neh

Eu tava check[ando] a banda no momento, mas tava usando apenas metade da banda -> 9mb/s de 20mb/s disponiveis.

CPU em 386% de uso e memória a 1.4 em uso de 7gb disponíveis.

 

Quando estava a mais de 2500, eu tinha que ficar reiniciando o apache, que estava configurado para 3000.

 

Parece que a única solução é o balanceamento de carga???

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.