Por que 20 pedidos são executados em paralelo mais lento que 10x2?

1

Esta questão me incomoda, e eu não acho que vou encontrar a resposta, então achei que seria melhor procurar ajuda.

Quando faço:

root@server1:~$ ab -n 20 -c 20 http://www.testserver.com/

A duração é de 4 segundos.

Quando eu faço (ao mesmo tempo):

root@server1:~$ ab -n 10 -c 10 http://www.testserver.com/
root@server2:~$ ab -n 10 -c 10 http://www.testserver.com/

A duração combinada é de 2,5 segundos.

Eu acho que o servidor de teste não está incomodado com a localização dos pedidos, e eu assumo que o servidor de testes e servidor1 e servidor2 não estão atingindo o limite de largura de banda (a página não é tão pesada).

O que está causando isso? A resposta provavelmente será realmente estúpida, mas eu serei feliz, independentemente disso.

    
por Aeolun 20.05.2012 / 16:55

2 respostas

3

Existem alguns tipos de carga em que o aumento da concorrência leva à queda de desempenho. Primeiro vem a minha mente é sequencial HDD ler - você terá melhor desempenho geral se você tiver um segmento de leitura de arquivos grandes.

Você precisa investigar a carga do seu servidor e encontrar o gargalo.

Também 10 solicitações são muito poucas para tirar conclusões. O teste adequado exige que você monitore o sistema em processo e identifique o período de aquecimento do sistema, quando os fatores de carga estiverem estabilizados. Após o aquecimento, você pode executar testes reais e, estatisticamente, pesquisar os resultados para ter certeza de que eles são válidos.

    
por 20.05.2012 / 17:13
0

Quando você executa um processo, a CPU inteira está apenas trabalhando para esse processo. (ok, e alguns para o kernel). Quando você executa 2 processos, o kernel deve alternar entre eles, e em cada switch ele tem que armazenar alguns dados para ram, e depois recuperá-los, o que causa alguma sobrecarga, então - mais processos - mais overhead.

Além disso, depende de quantos funcionários do apache estão atualmente iniciados. Se houver 10 em execução, basta que o servidor seja a página. Se você iniciar 20 conexões paralelas, mais 10 trabalhos precisam ser iniciados, o que utiliza recursos (ou as solicitações precisam esperar).

    
por 20.05.2012 / 17:04