Por que o tempo de resposta da página estática aumenta com o aumento de solicitações simultâneas?

1

Eu não entendo o desempenho que estou vendo do apache. Eu esperaria que mais solicitações de apache simultâneas tivessem um desempenho melhor do que menos, até certo ponto, mas além de 3 solicitações simultâneas, o desempenho geral é plano. Por exemplo, vejo as mesmas solicitações / s se eu tiver 3 ou 4 solicitações simultâneas. Com cada solicitação simultânea adicional, o tempo médio de resposta aumenta para que a taxa geral de tratamento de solicitações permaneça a mesma.

Para testar isso, criei um novo ubuntu 10.04 vm no slicehost. Esta é uma vm de 4 núcleos. Eu configurei com

aptitude update
aptitude install apache2 apache2-utils curl
curl localhost/ # verify hello world static page works

Em seguida, aferi o tempo de resposta e reqs / seg.

Edite 4: eu fiz benchmarking com algo como "para x em $ (seq 1 40); faça ab -n 10000 -c $ x -q localhost / | grep whatever; done".

Os comandos e dados exatos estão em link

O uso da CPU foi de cerca de 25% em cada núcleo durante a execução dos testes.

Editar 2: o uso da memória foi de 45/245 MB de acordo com o htop.

Editar 1: Eu tentei a mesma coisa em um ubuntu 11.04 vm e o problema geral é o mesmo, mas o desempenho é ainda pior: ele fica em torno de 2100 reqs / seg para a maioria dos níveis de simultaneidade e usa cerca de 50% cpu em cada núcleo.

Editar 3: Eu tentei em hardware real e vi um pico em cerca de 4 ou 5 solicitações simultâneas e, em seguida, caiu um pouco e achatou.

Alguém pode explicar por que isso está acontecendo, como posso descobrir qual é o gargalo ou como posso melhorar isso? Fiz algumas pesquisas e não encontrei nenhuma resposta.

    
por Dan Benamy 28.12.2011 / 20:36

3 respostas

1

I don't understand the performance I'm seeing from apache. I would expect that more concurrent apache requests would perform better than fewer, up to a point, but beyond 3 concurrent requests, overall performance is flat.

Parece que você está vendo exatamente o que você disse que esperava. Mais solicitações simultâneas fazem com que o Apache tenha um desempenho melhor, até certo ponto, e o desempenho é plano. O que parece ter te surpreendido é que o ponto ocorre com um baixo número de solicitações simultâneas.

Não sei por que você acha isso surpreendente. Não há E / S de disco real, já que a página está certamente na RAM. Portanto, é puramente uma atividade vinculada à CPU e ligada à rede. Uma vez que você tenha solicitações suficientes para amarrar todos os núcleos e preencher a rede com uma solicitação, outra solicitação estará em andamento. Não há razão para que mais conexões esperadas tornem as coisas melhores.

Então, isso realmente deixa apenas a questão de qual é o fator limitante. É difícil dizer sem mais detalhes, mas eu observaria a quantidade de uso da CPU do sistema e a largura de banda da rede. Muito provavelmente, a CPU ou a interface de rede está se esgotando.

    
por 29.12.2011 / 09:32
0

Você provavelmente está vendo o impacto da sobrecarga na pilha de rede. Com o aumento da simultaneidade, você terá mais conexões simultâneas abertas, portanto o sistema e o apache precisam trabalhar mais para abrir e fechar essas conexões. Isso normalmente degrada o desempenho do Apache e resulta em um tempo médio mais longo por solicitação nos níveis de simultaneidade.

Eu também suspeito que você tenha mais processos filho do Apache rodando em níveis de concorrência mais altos. Isso requer tempo para girar estes para cima e para baixo.

Problemas de rede podem ser ainda mais complicados se você estiver executando o teste no mesmo sistema que o servidor da web.

Ajustar a pilha TCP / IP, as configurações do KeepAlive (se ativado) e os tempos limite podem melhorar isso.

No entanto, esse é um problema conhecido há muito tempo com o dimensionamento do apache.

Aqui está um artigo clássico sobre o assunto. PDF: link

    
por 28.12.2011 / 22:10
0

Por favor, verifique a documentação de desempenho (ainda não oficial) no wiki httpd Apache:

link

Uma palavra final: não sei o que "VM" implica no seu caso, mas pode ser um gargalo de desempenho.

    
por 29.12.2011 / 14:35