Apache Bench - Configuração do ambiente
Neste capítulo, iremos guiá-lo como configurar seu ambiente para Apache Bench em seu VPS.
Requisitos do sistema
Memory - 128 MB
Disk Space - Sem requisitos mínimos
Operating System - Sem requisitos mínimos
Instalando o Apache Bench
O Apache Bench é um aplicativo independente e não depende da instalação do servidor da web Apache. A seguir está um processo de duas etapas para instalar o Apache Bench.
Step 1 - Atualizar banco de dados de pacotes.
# apt-get update
Observe que o símbolo # antes de um comando de terminal significa que o usuário root está emitindo esse comando.
Step 2 - Instale o pacote apache2 utils para obter acesso ao Apache Bench.
# apt-get install apache2-utils
O Apache Bench está instalado agora. Se você quiser testar um aplicativo web hospedado no mesmo VPS, basta instalar o servidor web Apache apenas -
# apt-get install apache2
Sendo um utilitário Apache, o Apache Bench é instalado automaticamente na instalação do servidor da web Apache.
Verificando a instalação do Apache Bench
Vamos agora ver como verificar a instalação do Apache Bench. O código a seguir ajudará a verificar a instalação -
# ab -V
Output
This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Quando você vê a saída do terminal acima, significa que instalou com sucesso o Apache Bench.
Criando um Usuário Sudo Privilegiado
Do ponto de vista da segurança, é considerada uma boa prática para o administrador do sistema criar um usuário sudo em vez de trabalhar como root. Criaremos um usuário de teste, denominado test, para a finalidade -
# useradd -m -d /home/test -g sudo test
Vamos definir a senha para o novo usuário -
# passwd test
O sistema solicitará uma nova senha para o teste do usuário. Você pode inserir uma senha simples, pois estamos apenas testando, e não implantando no servidor de produção. Normalmente, o comando sudo solicitará que você forneça a senha de usuário sudo; é recomendado não usar senhas complicadas, pois o processo se torna complicado.
Output
Enter new UNIX password:
Retype new UNIX password:
passwd: password updated successfully
Testando o site Apache.org
Nesta seção, testaremos o site Apache.org. Vamos primeiro mudar para o teste de usuário sudo -
# su test
Para começar, vamos testar o site da organização Apache, https://www.apache.org/. Vamos primeiro executar o comando e, em seguida, entender a saída -
$ ab -n 100 -c 10 https://www.apache.org/
Aqui -né o número de solicitações a serem executadas para a sessão de benchmarking. O padrão é apenas executar uma única solicitação, o que geralmente leva a resultados de benchmarking não representativos.
E -cé a simultaneidade e denota o número de várias solicitações a serem executadas ao mesmo tempo. O padrão é uma solicitação por vez.
Portanto, neste teste, o Apache Bench fará 100 solicitações com simultaneidade 10 para o servidor da organização Apache.
Output
This is ApacheBench, Version 2.3 <$Revision: 1604373 $>
Copyright 1996 Adam Twiss, Zeus Technology Ltd, http://www.zeustech.net/
Licensed to The Apache Software Foundation, http://www.apache.org/
Benchmarking www.apache.org (be patient).....done
Server Software: Apache/2.4.7
Server Hostname: www.apache.org
Server Port: 443
SSL/TLS Protocol: TLSv1.2,ECDHE-RSA-AES256-GCM-SHA384,2048,256
Document Path: /
Document Length: 58769 bytes
Concurrency Level: 10
Time taken for tests: 1.004 seconds
Complete requests: 100
Failed requests: 0
Total transferred: 5911100 bytes
HTML transferred: 5876900 bytes
Requests per second: 99.56 [#/sec] (mean)
Time per request: 100.444 [ms] (mean)
Time per request: 10.044 [ms] (mean, across all concurrent requests)
Transfer rate: 5747.06 [Kbytes/sec] received
Connection Times (ms)
min mean[+/-sd] median max
Connect: 39 46 30.9 41 263
Processing: 37 40 21.7 38 255
Waiting: 12 15 21.7 13 230
Total: 77 86 37.5 79 301
Percentage of the requests served within a certain time (ms)
50% 79
66% 79
75% 80
80% 80
90% 82
95% 84
98% 296
99% 301
100% 301 (longest request)
Depois de executar nosso primeiro teste, será fácil reconhecer o padrão de uso para este comando, que é o seguinte -
# ab [options .....] URL
Onde,
ab - Comando Apache Bench
options - sinalizadores para uma tarefa específica que desejamos realizar
URL - URL do caminho que queremos testar
Compreendendo os valores de saída
Precisamos entender as diferentes métricas para entender os vários valores de saída retornados por ab. Aqui vai a lista -
Server Software - É o nome do servidor web retornado no cabeçalho HTTP do primeiro retorno bem-sucedido.
Server Hostname - É o DNS ou endereço IP fornecido na linha de comando.
Server Port- É a porta à qual ab está se conectando. Se nenhuma porta for fornecida na linha de comando, o padrão será 80 para http e 443 para https.
SSL/TLS Protocol- Este é o parâmetro de protocolo negociado entre o cliente e o servidor. Isso só será impresso se SSL for usado.
Document Path - Este é o URI de solicitação analisado a partir da string da linha de comando.
Document Length- É o tamanho em bytes do primeiro documento retornado com sucesso. Se o comprimento do documento mudar durante o teste, a resposta será considerada um erro.
Concurrency Level - Este é o número de clientes simultâneos (equivalente a navegadores da web) usados durante o teste.
Time Taken for Tests - Este é o tempo decorrido desde o momento em que a primeira conexão de soquete é criada até o momento em que a última resposta é recebida.
Complete Requests - O número de respostas bem-sucedidas recebidas.
Failed Requests- O número de solicitações consideradas com falha. Se o número for maior que zero, outra linha será impressa mostrando o número de solicitações que falharam devido à conexão, leitura, comprimento de conteúdo incorreto ou exceções.
Total Transferred- O número total de bytes recebidos do servidor. Esse número é essencialmente o número de bytes enviados pela rede.
HTML Transferred- O número total de bytes do documento recebidos do servidor. Este número exclui bytes recebidos em cabeçalhos HTTP
Requests per second- Este é o número de solicitações por segundo. Este valor é o resultado da divisão do número de solicitações pelo tempo total gasto.
Time per request- O tempo médio gasto por solicitação. O primeiro valor é calculado com a fórmula simultaneidade * timetaken * 1000 / done, enquanto o segundo valor é calculado com a fórmula timetaken * 1000 / done
Transfer rate - A taxa de transferência calculada pela fórmula totalread / 1024 / timetaken.
Análise rápida da saída do teste de carga
Tendo aprendido sobre os títulos dos valores de saída do comando ab, vamos tentar analisar e entender os valores de saída para nosso teste inicial -
A organização Apache está usando seu próprio software de servidor web - Apache (versão 2.4.7)
O servidor está escutando na Porta 443 por causa do https. Se fosse http, teria sido 80 (padrão).
O total de dados transferidos é de 58.769 bytes para 100 solicitações.
Teste concluído em 1.004 segundos. Não há solicitações com falha.
Solicitações por segundo - 99,56. Este é considerado um número muito bom.
Tempo por solicitação - 100,444 ms (para 10 solicitações simultâneas). Portanto, em todas as solicitações, é 100,444 ms / 10 = 10,044 ms.
Taxa de transferência - 1338,39 [Kbytes / s] recebidos.
Nas estatísticas de tempo de conexão, você pode observar que muitas solicitações tiveram que esperar alguns segundos. Isso pode ser devido ao servidor da web apache colocar as solicitações na fila de espera.
Em nosso primeiro teste, testamos um aplicativo (ou seja, www.apache.org) hospedado em um servidor diferente. Na parte posterior do tutorial, testaremos nossos aplicativos da web de amostra hospedados no mesmo servidor a partir do qual executaremos os testes ab. Isso é para facilitar o aprendizado e o propósito de demonstração. Idealmente, o nó host e o nó de teste devem ser diferentes para uma medição precisa.
Para melhor aprender ab, você deve comparar e observar como os valores de saída variam para diferentes casos à medida que avançamos neste tutorial.
Traçando a saída do Apache Bench
Aqui, traçaremos o resultado relevante para ver quanto tempo o servidor leva à medida que o número de solicitações aumenta. Para isso, vamos adicionar o-g opção no comando anterior seguida do nome do arquivo (aqui fora.data) no qual os dados de saída ab serão salvos -
$ ab -n 100 -c 10 -g out.data https://www.apache.org/
Vamos agora ver o out.data antes de criarmos um enredo -
$ less out.data
Output
starttime seconds ctime dtime ttime wait
Tue May 30 12:11:37 2017 1496160697 40 38 77 13
Tue May 30 12:11:37 2017 1496160697 42 38 79 13
Tue May 30 12:11:37 2017 1496160697 41 38 80 13
...
Vamos agora entender os cabeçalhos das colunas no out.data arquivo -
starttime - Esta é a data e hora em que a chamada começou.
seconds - Igual à hora de início, mas no formato de carimbo de data / hora Unix (data -d @ 1496160697 retorna a saída da hora de início).
ctime - Este é o tempo de conexão.
dtime - Este é o tempo de processamento.
ttime - Este é o Tempo Total (é a soma de ctime e dtime, matematicamente ttime = ctime + dtime).
wait - Este é o tempo de espera.
Para uma visualização pictórica de como esses vários itens estão relacionados entre si, dê uma olhada na imagem a seguir -
Se estivermos trabalhando em um terminal ou onde os gráficos não estiverem disponíveis, gnuploté uma ótima opção. Vamos entender isso rapidamente seguindo as etapas a seguir.
Vamos instalar e lançar o gnuplot -
$ sudo apt-get install gnuplot
$ gnuplot
Output
G N U P L O T
Version 4.6 patchlevel 6 last modified September 2014
Build System: Linux x86_64
Copyright (C) 1986-1993, 1998, 2004, 2007-2014
Thomas Williams, Colin Kelley and many others
gnuplot home: http://www.gnuplot.info
faq, bugs, etc: type "help FAQ"
immediate help: type "help" (plot window: hit 'h')
Terminal type set to 'qt'
gnuplot>
Como estamos trabalhando no terminal e supondo que não haja gráficos disponíveis, podemos escolher o terminal burro que dará saída em ASCII sobre o próprio terminal. Isso nos ajuda a ter uma ideia de como será o nosso gráfico com esta ferramenta rápida. Vamos agora preparar o terminal para o gráfico ASCII.
gnuplot> set terminal dumb
Output
Terminal type set to 'dumb'
Options are 'feed size 79, 24'
Como nosso terminal gnuplot agora está pronto para o gráfico ASCII, vamos representar graficamente os dados do out.data arquivo -
gnuplot> plot "out.data" using 9 w l
Output
1400 ++-----+------+-----+------+------+------+------+-----+------+-----++
+ + + + + + +"out.data" using 9 ****** +
| |
1200 ++ ********************************************
| ******************* |
1000 ++ * ++
| * |
| * |
800 ++ * ++
| * |
| * |
600 ++ * ++
| * |
| * |
400 ++ * ++
| * |
200 ++ * ++
| * |
+**** + + + + + + + + + +
0 ++-----+------+-----+------+------+------+------+-----+------+-----++
0 10 20 30 40 50 60 70 80 90 100
Traçamos o ttime, o tempo total (em ms) da coluna 9, em relação ao número de solicitações. Podemos notar que, para as solicitações de dez iniciais, o tempo total foi nos cerca de 100 ms, para os próximos 30 pedidos (a partir de 10 ° a 40 ° ), que aumentou para 1100 ms, e assim por diante. Seu enredo deve ser diferente dependendo de seuout.data.