teste de carga ab


194

Alguém pode me orientar no processo de como posso carregar o teste do meu site usando a ferramenta de banco de dados apache ( ab)?

Eu quero saber o seguinte:

Quantas pessoas por minuto o site pode lidar?

Por favor, me guie pelos comandos que devo executar para descobrir isso.

Eu tentei todos os tutoriais, e eles são confusos.

Respostas:


314

A ferramenta de referência do apache é muito básica e, embora ofereça uma sólida idéia de desempenho, é uma má idéia depender apenas dela se você planeja expor seu site a um sério estresse na produção.

Dito isto, aqui estão os parâmetros mais comuns e mais simples:

-c: ("Simultaneidade"). Indica quantos clientes (pessoas / usuários) acessarão o site ao mesmo tempo. Durante a abexecução, haverá -cclientes acessando o site. Isso é o que realmente decide a quantidade de estresse que seu site sofrerá durante o benchmark.

-n: Indica quantas solicitações serão feitas. Isso apenas decide o comprimento do benchmark. Um -nvalor alto com um -cvalor que o servidor possa suportar é uma boa idéia para garantir que as coisas não quebrem sob estresse contínuo: não é o mesmo dar suporte ao estresse por 5 segundos e por 5 horas.

-k: Isso faz os navegadores de funcionalidade "KeepAlive" por natureza. Você não precisa passar um valor para -kele "booleano" (ou seja: indica que deseja que seu teste use o cabeçalho Keep Alive do HTTP e mantenha a conexão). Como os navegadores fazem isso e é provável que você queira simular o estresse e o fluxo que o site terá dos navegadores, é recomendável que você faça uma referência com isso.

O argumento final é simplesmente o host. Por padrão, ele atingirá o protocolo http: // se você não o especificar.

ab -k -c 350 -n 20000 example.com/

Ao emitir o comando acima, você acessará http://example.com/ com 350 conexões simultâneas até que 20 mil solicitações sejam atendidas. Isso será feito usando o cabeçalho keep alive.

Depois que o processo terminar os 20 mil pedidos, você receberá um feedback sobre as estatísticas. Isso mostrará o desempenho do site sob o estresse que você coloca ao usar os parâmetros acima.

Para descobrir quantas pessoas o site pode lidar ao mesmo tempo, verifique se os tempos de resposta (média, mínimo e máximo de resposta, solicitações com falha etc.) são números que seu site pode aceitar (sites diferentes podem desejar velocidades diferentes). Você pode executar a ferramenta com valores -c diferentes até chegar ao local em que diz "Se eu aumentá-la, ela começa a receber solicitações com falha e é interrompida".

Dependendo do seu site, você espera um número médio de solicitações por minuto. Isso varia muito, você não poderá simular isso com ab. No entanto, pense da seguinte maneira: se o usuário médio atender 5 solicitações por minuto e o tempo médio de resposta que você achar válido for de 2 segundos, isso significa que 10 segundos em um minuto 1 usuário estará solicitando, significando apenas 1/6 do tempo em que chegará ao site. Isso também significa que se você tiver 6 usuários acessando o site com ab simultaneamente, provavelmente terá 36 usuários em simulação, mesmo que seu nível de simultaneidade (-c) seja apenas 6.

Isso depende do comportamento que você espera de seus usuários que usam o site, mas você pode obtê-lo em "Espero que meu usuário atinja solicitações X por minuto e considero um tempo médio de resposta válido em 2 segundos". Em seguida, modifique seu nível -c até atingir 2 segundos do tempo médio de resposta (mas verifique se o tempo máximo de resposta e o stddev ainda são válidos) e veja o tamanho que você pode aumentar para -c.

Espero ter explicado isso claramente :) Boa sorte


5
Resposta direta e clara! Você poderia explicar um pouco mais sobre por que você conseguiu isso "Isso também significa que se você tiver 6 usuários acessando o site com ab simultaneamente, provavelmente terá 36 usuários em simulação, mesmo que seu nível de simultaneidade (-c) seja apenas 6. "
Kbariotis

3
Apenas um lembrete: você provavelmente deseja adicionar a -lopção se a página tiver conteúdo dinâmico, para que você não receba muitas solicitações com falha devido ao comprimento do conteúdo ser diferente entre as solicitações.
JCM

73

Por favor, me guie pelos comandos que devo executar para descobrir isso.

O teste mais simples que você pode fazer é executar 1000 solicitações, 10 por vez (que simula aproximadamente 10 usuários simultâneos, obtendo 100 páginas cada - ao longo da duração do teste).

ab -n 1000 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://www.example.com/

-n 1000 é o número de solicitações a serem feitas.

-c 10 instrui a AB a fazer 10 solicitações por vez, em vez de 1 solicitação por vez, para simular melhor os visitantes simultâneos (vs. visitantes sequenciais).

-kenvia o KeepAlivecabeçalho, que solicita ao servidor da Web que não desligue a conexão após a conclusão de cada solicitação, mas continue reutilizando-a.

Também estou enviando o cabeçalho extra Accept-Encoding: gzip, deflateporque o mod_deflate quase sempre é usado para compactar a saída de texto / html de 25% a 75% - cujos efeitos não devem ser descartados devido ao impacto no desempenho geral do servidor da web (por exemplo, pode transferir 2x os dados na mesma quantidade de tempo, etc).

Resultados:

Benchmarking www.example.com (be patient)
Completed 100 requests
...
Finished 1000 requests


Server Software:        Apache/2.4.10
Server Hostname:        www.example.com
Server Port:            80

Document Path:          /
Document Length:        428 bytes

Concurrency Level:      10
Time taken for tests:   1.420 seconds
Complete requests:      1000
Failed requests:        0
Keep-Alive requests:    995
Total transferred:      723778 bytes
HTML transferred:       428000 bytes
Requests per second:    704.23 [#/sec] (mean)
Time per request:       14.200 [ms] (mean)
Time per request:       1.420 [ms] (mean, across all concurrent requests)
Transfer rate:          497.76 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.1      0       1
Processing:     5   14   7.5     12      77
Waiting:        5   14   7.5     12      77
Total:          5   14   7.5     12      77

Percentage of the requests served within a certain time (ms)
  50%     12
  66%     14
  75%     15
  80%     16
  90%     24
  95%     29
  98%     36
  99%     41
 100%     77 (longest request)

Para uma interpretação mais simples, ignore tudo, menos esta linha:

Requests per second:    704.23 [#/sec] (mean)

Multiplique isso por 60 e você terá suas solicitações por minuto.

Para obter resultados do mundo real, convém testar o Wordpress em vez de um arquivo HTML ou index.php estático, porque você precisa saber como tudo funciona juntos: incluindo código PHP complexo e várias consultas MySQL ...

Por exemplo, aqui estão os resultados dos testes de uma nova instalação do Wordpress no mesmo sistema e ambiente WAMP (estou usando o WampDeveloper, mas também existem Xampp, WampServer e outros) ...

Requests per second:    18.68 [#/sec] (mean)

Isso é 37x mais lento agora!

Após o teste de carga, há várias ações que você pode fazer para melhorar o desempenho geral (solicitações por segundo) e também tornar o servidor da Web mais estável sob uma carga maior (por exemplo, aumentando o -ne as -ctendências a travar o Apache), que você pode ler aqui:

Teste de carga do Apache com AB (Apache Bench)


9

Etapas para configurar o Apache Bench (AB) no Windows (IMO - recomendado).

Etapa 1 - Instale o Xampp.
Etapa 2 - Abra o CMD.
Etapa 3 - Vá para o destino do banco apache ( cd C:\xampp\apache\bin) no CMD
Etapa 4 - Cole o comando ( ab -n 100 -c 10 -k -H "Accept-Encoding: gzip, deflate" http://localhost:yourport/)
Etapa 5 - Aguarde. Seu feito


Não está funcionando ... Estou recebendo este erro: Comparando localhost (seja paciente) ... apr_socket_recv: Conexão recusada (111)
Vijaysinh Parmar

substituir localhost por 127.0.0.1
akshaynagpal

3

Eu também estava curioso para saber se posso medir a velocidade do meu script com abs apache ou um script de medida de construção / destruição de php ou uma extensão php.

os dois últimos falharam para mim: são aproximados. após o qual pensei em tentar "ab" e "abs".

o comando "ab -k -c 350 -n 20000 example.com/" é lindo porque é tudo mais fácil!

mas alguém pensou em "localhost" em qualquer servidor apache, por exemplo www.apachefriends.org?

você deve criar uma pasta como "bench" na raiz, onde você tem 2 arquivos: teste "bench.php" e faça referência a "void.php".

e então: compare!

bench.php

<?php

for($i=1;$i<50000;$i++){
    print ('qwertyuiopasdfghjklzxcvbnm1234567890');
}
?>

void.php

<?php
?>

na área de trabalho, você deve usar um arquivo .bat (no Windows) como este:

bench.bat

"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/void.php
"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/bench.php
pause

Agora, se você prestar atenção de perto ...

o script nulo não produz resultados zero !!! Portanto, a conclusão é: a partir do segundo resultado, o primeiro resultado deve ser diminuído !!!

aqui eu tenho:

c:\xampp\htdocs\bench>"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/void.php
This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Apache/2.4.33
Server Hostname:        localhost
Server Port:            80

Document Path:          /bench/void.php
Document Length:        0 bytes

Concurrency Level:      1
Time taken for tests:   11.219 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      2150000 bytes
HTML transferred:       0 bytes
Requests per second:    891.34 [#/sec] (mean)
Time per request:       1.122 [ms] (mean)
Time per request:       1.122 [ms] (mean, across all concurrent requests)
Transfer rate:          187.15 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.3      0       1
Processing:     0    1   0.9      1      17
Waiting:        0    1   0.9      1      17
Total:          0    1   0.9      1      17

Percentage of the requests served within a certain time (ms)
  50%      1
  66%      1
  75%      1
  80%      1
  90%      1
  95%      2
  98%      2
  99%      3
 100%     17 (longest request)

c:\xampp\htdocs\bench>"c:\xampp\apache\bin\abs.exe" -n 10000 http://localhost/bench/bench.php
This is ApacheBench, Version 2.3 <$Revision: 1826891 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/

Benchmarking localhost (be patient)
Completed 1000 requests
Completed 2000 requests
Completed 3000 requests
Completed 4000 requests
Completed 5000 requests
Completed 6000 requests
Completed 7000 requests
Completed 8000 requests
Completed 9000 requests
Completed 10000 requests
Finished 10000 requests


Server Software:        Apache/2.4.33
Server Hostname:        localhost
Server Port:            80

Document Path:          /bench/bench.php
Document Length:        1799964 bytes

Concurrency Level:      1
Time taken for tests:   177.006 seconds
Complete requests:      10000
Failed requests:        0
Total transferred:      18001600000 bytes
HTML transferred:       17999640000 bytes
Requests per second:    56.50 [#/sec] (mean)
Time per request:       17.701 [ms] (mean)
Time per request:       17.701 [ms] (mean, across all concurrent requests)
Transfer rate:          99317.00 [Kbytes/sec] received

Connection Times (ms)
              min  mean[+/-sd] median   max
Connect:        0    0   0.3      0       1
Processing:    12   17   3.2     17      90
Waiting:        0    1   1.1      1      26
Total:         13   18   3.2     18      90

Percentage of the requests served within a certain time (ms)
  50%     18
  66%     19
  75%     19
  80%     20
  90%     21
  95%     22
  98%     23
  99%     26
 100%     90 (longest request)

c:\xampp\htdocs\bench>pause
Press any key to continue . . .

90-17 = 73 o resultado que eu espero!


2

Carregar o teste de sua API usando apenas ab não é suficiente. No entanto, acho que é uma ótima ferramenta para fornecer uma idéia básica de como seu site tem desempenho.

Se você deseja usar o comando ab para testar vários pontos de extremidade da API, com dados diferentes, todos ao mesmo tempo em segundo plano, é necessário usar o comando "nohup". Ele executa qualquer comando, mesmo quando você fecha o terminal.

Eu escrevi um script simples que automatiza todo o processo, fique à vontade para usá-lo: http://blog.ikvasnica.com/entry/load-test-multiple-api-endpoints-concurrently-use-this-simple-shell-script

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.