inconsistências entre teste de estresse e navegação real

1

Tenho notado que um novo servidor que estou configurando é razoavelmente mais lento que o servidor atual e fiz alguns testes de estresse / benchmarking para estudar o problema.

Mas depois dos testes, estou obtendo resultados contraditórios.

Os detalhes da máquina:

CentOS-6.4 (i386)
Apache 2.4.4
PHP 5.4.17
mySQL 5.6.12
8GB RAM
No cache

Este é um site Joomla.

Uma observação: atualmente, esta máquina só é acessada via VPN (isso pode ser relevante para a lentidão)

Eu reiniciei o httpd e o mysql antes de fazer os testes.

Os testes:

  1. Navegação:

    é mais lento (não apenas parece , é realmente mais lento ao navegar, com qualquer tipo de navegador (Safari, Firefox, Chrome, IE), eu não tive tempo mas é mais lento que o site atual e sem qualquer outro usuário lá).

  2. Depuração via Joomla:

    Liguei a depuração da página inicial e é necessária uma média de 1.294 segundos para renderizar (via o log dessa depuração) enquanto testa no servidor atual (mesma configuração mas com o CentOS 6.3 e PHP 5.3) leva uma média de 0,762 segundos.

  3. ab:

    Eu tentei 5 usuários simultaneamente, fazendo 1000 solicitações, isso foi feito a partir de outra máquina.

    Eu realmente lutei com este, porque para um arquivo de texto estático ou um simples eco e um PHP me deu isso:

    Connection Times (ms)
                  min  mean[+/-sd] median   max
    Connect:        3    5   1.7      5      17
    Processing:     4    7   1.5      6      20
    Waiting:        4    6   1.5      6      19
    Total:          8   11   2.5     11      27
    

    E a página inicial do Joomla:

    Connection Times (ms)
                  min  mean[+/-sd] median   max
    Connect:        0    0   0.3      0       9
    Processing:   321  423 115.8    403    1737
    Waiting:      309  406 114.0    386    1706
    Total:        322  423 115.9    403    1737
    

    De qualquer forma, isso é mais rápido que o > 1 segundo que eu tinha ao navegar (teste 1).

  4. jmeter (2.9):

    Eu fiz um teste com 5 usuários simultâneos, fazendo 100 solicitações com 2 segundos de aumento.

    Uma página estática me deu essa média:

    label   # Samples   Average Median  90% Line    Min Max Error % Throughoutput   KB/sec
    TOTAL   500 8   8   11  7   21  0.0 92.66123054114159   36.55051195329874
    

    E a página inicial me deu isso:

    label   # Samples   Average Median  90% Line    Min Max Error % Throughoutput   KB/sec
    TOTAL   500 445 436 507 366 969 0.0 10.331645831180907  856.8125096859179
    

Por fim, a pergunta:

Por que a navegação é tão lenta, sabendo que o teste de estresse ( ab ou jmeter ) me deu resultados muito mais rápidos? (Esses testes são adequados ou devo tentar outra coisa?)

(Eu não sei se a VPN pode estar com defeito aqui, mas isso não explica a velocidade de navegação e a velocidade de teste, ambos precisam estar conectados à VPN).

    
por jackJoe 16.09.2013 / 10:14

3 respostas

2

Suspeito que a resposta está nas coisas que os navegadores fazem, que jmeter e ab não.

Ou seja, cookies e javascript (e imagens, até certo ponto).

Da mesma forma, eu diria que seus benchmarks não são realmente representativos da navegação real.

Quando visito um site, não vou à página inicial e recarrego a página várias vezes. Eu vou e clico em muitas coisas diferentes. A distinção importante aqui é que, se o seu servidor está configurado corretamente, muitos dos opcode de PHP gerados, fragmentos de páginas gerados, etc. vão para a memória, então o primeiro hit é lento, mas todos os subsequentes são rápidos.

Você deve tentar encontrar uma maneira de simular a navegação do "mundo real". Uma idéia fora da minha cabeça é executar o Selenium IDE, gravar suas teclas digitadas e pressionadas enquanto navega, e então poder reproduzi-las uma e outra vez, em vários hosts.

A VPN pode ser responsável, mas teoricamente deve causar uma sobrecarga maior em ambos os tipos de conexão, tanto ab et al. e navegadores.

Suspeito que, se você executar tcpdump / wireshark / ngrep etc em seu servidor quando você ab , verá que muito menos recursos de página são carregados em comparação com o mesmo desempenho com o navegador.

    
por 16.09.2013 / 10:41
1

verifique sua página com uma ferramenta como "YSLOW", que pode dar uma dica de onde as timelags começam.

e sempre checaria o mysql slow_queries e usaria um script de ajuste para avaliar se o seu gargalo é o seu db. se não - > (você já fez) verificar o desempenho nulo do seu servidor web com um simples arquivo estático; depois com ab; em seguida, investigue a página inteira com um navegador e alguns plug-ins do webmaster.

    
por 16.09.2013 / 17:11
1

Como o Tom disse, você deve simular o comportamento real do navegador. Para o JMeter é muito fácil:

  1. Adicione o Gerenciador de cookies HTTP
  2. Adicione Gerenciador de cache HTTP
  3. Adicione o HTTP Header Manager e configure o User-Agent do navegador que você costuma usar.
  4. Na verificação de solicitação HTTP ou de solicitação HTTP na tarefa Opção configurações: Recuperar todos os recursos incorporados de arquivos HTML para simule um navegador recuperando recursos incorporados (como gifs, css, js etc)
  5. Nas configurações de verificação da tarefa Opção Use o pool simultâneo. Tamanho: n. Use 2-4 threads.
por 24.11.2013 / 13:13